Если запросы, которые вы собираетесь разрешить, довольно ограничены, может быть хорошим подходом является создание схемы, которая бы представляла, каким будет действительный запрос. Тогда вы можете просто увидеть, является ли их XML действительным в соответствии с этой схемой. Кроме того, я знаю, что вы можете использовать DLL CAML Builder из кода. Я не могу найти пример этого сразу, но может быть способ использовать его методы построения CAML в блоке try / catch, чтобы остановить когда-либо неправильные запросы.
Кроме того, мне приходит в голову, что вам, возможно, придется остерегаться того факта, что FieldRef запроса CAML необходимо будет построить с использованием внутреннего имени поля, которое может отличаться от отображаемого имени.