As the others stated, RPKI would be the way to go, but it's not there yet. At exchange points we generally put a max-prefix limit on every session.

Additionally we use the following rules:

1) No default route

2) No bogons, more exactly this list:

        route-filter 0.0.0.0/8 orlonger reject;
        route-filter 127.0.0.0/8 orlonger reject;
        route-filter 10.0.0.0/8 orlonger reject;
        route-filter 172.16.0.0/12 orlonger reject;
        route-filter 192.168.0.0/16 orlonger reject;
        route-filter 224.0.0.0/4 orlonger reject;
        route-filter 240.0.0.0/4 orlonger reject;
        route-filter 169.254.0.0/16 orlonger reject;
        route-filter 192.0.2.0/24 orlonger reject;
        route-filter 198.51.100.0/24 orlonger reject;
        route-filter 203.0.113.0/24 orlonger reject;
        route-filter 100.64.0.0/10 orlonger reject;

3) No prefixes longer than /24

4) No private AS numbers in the path

5) None of our own prefixes

For IPv6 we do the same, only the bogons are different. I pasted our filter below this. Please be aware that the syntax might be a bit odd but that is due to the Juniper way of matching prefixes. For Cisco syntax you can go here: [IPv6 BGP filter recommendations][1] (The Juniper example on the page is buggy, please use the one below if you want.)

<pre>
term ebgp-relaxed {
    from {
        family inet6;
        route-filter 3ffe::/16 orlonger;
        route-filter 0000::/8 orlonger;
        route-filter 2001:db8::/32 orlonger;
        route-filter 2001::/32 exact next policy;
        route-filter 2001::/32 longer;
        route-filter 2002::/16 exact next policy;
        route-filter 2002::/16 longer;
        route-filter fe00::/9 orlonger;
        route-filter ff00::/8 orlonger;
        route-filter 2000::/3 prefix-length-range /49-/128;
        route-filter 0::/0 orlonger;
    }
    then reject;
}
</pre>


  [1]: http://www.space.net/~gert/RIPE/ipv6-filters.html