of course there's a way, there are loads. firstly it is *YOUR* responsibiltiy to use a good community string in the first place. if the RO string is still "public", then you deserve all you get, right?
after that, standard access lists can be attached to a community string:
Router(config)# snmp-server community c0m4cc3ss ro SNMPCLIENTS
where SNMPCLIENTS is an access lsit defining clients.
and of course you should be putting your routers behind well configured firewalls...