2014-12-11 2 views
0

Я хотел бы знать, если это надежный. В моем PHP файл я следующий код:Проверяет, является ли строка строкой надежной формы предотвращения SQL-инъекций?

if(strpos($text,"'") === false) { 
    //perform query 
} else { /*illegal character*/ } 

Я знаю, что я, вероятно, звучит как идиот, но что недостатки в этом? Может ли кто-то использовать различную кодировку символов, возможно, обойти это и ввести одну цитату?

ответ

2

Если вы хотите, чтобы предотвратить SQL-инъекции - затем следуйте инструкциям здесь: How can I prevent SQL injection in PHP?

Попытка реализовать свои собственные меры только собирается закончиться в слезах.

И для записи - ваш код не будет препятствовать инъекциям SQL. Например

105; DROP TABLE Suppliers 

бы пройти через

+0

Так что-то вроде SELECT password FROM table WHERE username = "105; DROP TABLE table"; будет вводить, даже если это внутри кавычек? –

+0

Зависит от запроса. Но вы только сейчас проверяете '' 'anyway, а не' '', поэтому я мог бы использовать '' 'и get throguh. – Laurence

+0

Это был только пример, но thx –

0

Нет, это не так. Инъекции могут использовать ', ", ; и любое количество других символов. Например, если вы используете неправильную кодировку текста, некоторые символы Unicode могут использоваться для завершения строки. Как указывает @TheShiftExchange, ваш код пропускает команду DROP TABLES, и это может привести к разным видам других инъекций.

+0

Итак, если есть переменная с именем $ text, и эта переменная будет помещена в одинарные кавычки в SQL-запросе, как в двойных кавычках '$ text' внутри одиночных кавычек и точки с запятой внутри одиночных кавычек могут по-прежнему представлять угрозы, хотя я предотвращаю одинарные кавычки? –

+0

Ну, это другой вопрос, чем тот, который вы задали выше. Я не могу придумать способ описания того, что вы описываете в своем комментарии, но это не значит, что его нет. Вам гораздо лучше использовать параметризованные запросы, чем пытаться сделать какой-либо черный список. Трюки с кодировкой символов, символы Юникода и т. Д. Изобилуют. Все, что требуется, - это одно ненадлежащее фильтрованное значение для получения pwned. По крайней мере, кто-то может вызвать ошибку в вашем приложении, передав значение, подобное 'foo \\'. –

Смежные вопросы