Можете ли вы «SQL Inject» сравнить переменные PHP?

Итак, что-то, о чем мне было интересно во время работы над текущим проектом, – это если простое сравнение переменных подвержено атакам типа «SQL Injection», когда одна из переменных вводится пользователем.

Моя базовая функция входа в систему работает, беря предоставленное пользователем имя пользователя и используя подготовленный оператор, чтобы найти его в таблице профилей. Если запись найдена, profileID затем извлекается из записи и используется для поиска пароля пользователя в другой таблице разрешений. Если запрос THAT будет успешным, тогда пароль, предоставленный пользователем, будет === против полученного пароля из базы данных.

Поэтому мой вопрос заключается в том, что этот последний шаг представляет собой риск? Я попытался «взломать его сам, ставя его значения, как a' == 'a' || 'a a' == 'a' || 'a в попытке ложно вызвать $pass === $checkPermRow['pass'] но он, похоже, ничего не делает. Я в безопасности?

    Если вы используете подготовленные операторы и передаете входные данные в качестве параметров в подготовленный оператор, вы можете быть уверены в том, что SQL-инъекции. Параметры должны обрабатываться должным образом, и не должно быть возможным, чтобы фрагменты переданных параметров интерпретировались как код SQL вместо данных. Это точная точка параметризации, т. Е. Разделение кода и параметров данных.

    Поэтому не следует вводить что-либо в запрос. Однако вы не должны хранить пароли в открытом тексте, но в необратимой форме как хэш, используя соответствующую хэш-функцию.


    Что касается вашего вопроса, возможна ли инъекция в самом PHP: Да, инъекция кода может произойти в любом коде, который генерируется динамически, поэтому даже в PHP.

    Однако вам не нужно просто генерировать код динамически, но также выполнять его. PHP имеет некоторые функции, которые выполняют PHP), например, функция eval . Однако вы, вероятно, не будете использовать такие конструкции:

     if (eval("return '$pass' === '$checkPermRow[pass]';")) 

    Это было бы уязвимо для инъекции кода PHP и a' == 'a' || 'a a' == 'a' || 'a приведет к чему-то вроде:

     return 'a' == 'a' || 'a' === 'password from database';