Если я использую подготовленные MySQLi заявления, как показано ниже:
$stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?"); $stmt->bind_param('s',$Session); $stmt->execute(); $stmt->close();
Мне все еще нужно избегать моих переменных, таких как $Session
с mysqli_real_escape_string();
как показано ниже:
$Session = mysqli_real_escape_string($con1, $_COOKIE['Session']); $stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?"); $stmt->bind_param('s',$Session); $stmt->execute(); $stmt->close();
Нет, если вы используете готовые заявления повсюду в своем приложении, вы можете быть в безопасности от SQL-инъекций. Однако важной «добычей» является атака инъекций 2-го порядка, которая возникает, когда в некоторых запросах используются подготовленные заявления, а другие нет.
Согласно этому ответу аналогичного вопроса о SO:
подготовленные операторы / параметризованные запросы достаточны для предотвращения инъекции 1-го порядка в этом утверждении. Если вы используете неуправляемый динамический sql где-либо еще в своем приложении, вы все еще уязвимы для инъекции 2-го порядка.
Таким образом, подготовленные операторы создают разделение между отправляемыми данными и самим запросом SQL, гарантируя, что данные не могут быть неверно истолкованы как SQL-запрос. Тем не менее, злоумышленник все равно может вводить SQL в качестве данных, и хотя он не будет выполняться, когда он будет сначала сохранен, если вы используете подготовленные инструкции, вы все равно должны соблюдать осторожность при получении указанных результатов. Подготовленные заявления защищают ваше приложение в этом конкретном месте, но поскольку SQL по-прежнему разрешено хранить в базе данных, ваше приложение небезопасно, если вы позже используете эти данные без параметризации.
Это единственный ответ, который вам нужен.
Все путаные разговоры в другом ответе просто неактуальны. Парень пытается сказать вам, что если вы достаточно глупы, чтобы не использовать готовые заявления повсюду, тогда вы в опасности. Это совершенно очевидно и не относится к самому подготовленному заявлению.