«Инъекционные» дыры связаны с несоответствием контекста текста. Каждый раз, когда вы помещаете текстовую строку в другой контекст строки, вы должны выполнять кодирование, чтобы соответствовать измененному контексту. Соблазнительно просто слепо соединять строки, но сложность обработки строк обманчива.
Базы данных с чисто объектным интерфейсом защищены от инъекционных уязвимостей, так же как параметризованные запросы в SQL. Атакующий ничего не может вставить в свою строку, чтобы вырваться из контекста строкового литерала, в который вы его поместили.
Но GQL, в частности, не относится к этим. Это язык строковых запросов, и если вы объедините ненадежный неэкранированный материал в запрос типа "WHERE title='%s'" % title
, вы будете так же уязвимы, как и в случае с полноценным SQL. Возможно, ограниченные возможности GQL затрудняют использование этого для полной компрометации приложения, но, конечно, не являются невозможными в целом, и в самом лучшем случае ваше приложение все еще не так и будет падать, когда люди пытаются законно использовать апострофы. 1006 *
GQL имеет интерфейс привязки параметров. Используй это. Сопротивляйтесь привлекательности взлома строк.