поэтому у меня был мой друг, который пытался запустить SQLinjection на моем сайте, и ему удалось войти в него, используя код внизу. Как я могу это предотвратить? Я прочитал кое-что о дезинфекции переменных, но как это сделать?
'; INSERT INTO login (имя пользователя, пароль) VALUES (' Gjertsmells ',' password '); SELECT' password 'FROM Login WHERE' x '=' x
$db = new PDO('mysql:host=XXXXXXXX;dbname=XXXXXXX', 'XXXXXXXXXX', 'XXXXXXXXX'); // query MySQL to verify login $query = $db->prepare("SELECT password FROM login WHERE username='$username'"); $query->execute(); $column = $query->fetchColumn(); if($column === $password)
Идея подготовленных операторов состоит в том, что вы не объединяете переменные, вместо этого вы связываете параметры. Разница заключается в том, что переменная никогда не вставлена в SQL, а механизм MySQL обрабатывает переменную отдельно, что не оставляет возможности SQL Injection. У этого также есть дополнительный бонус, который не требует экранирования или предварительной обработки переменной.
$query = $db->prepare("SELECT password FROM login WHERE username = :username"); $query->execute(array(':username' => $username));
Подготовьте свое заявление следующим образом:
$query = $db->prepare("SELECT `password` FROM `login` WHERE `username` = :username"); $query->execute(array(":username" => $username));
Или привяжите параметры, используя тот же подготовленный оператор, как это:
$query->bindParam(":username", $username, PDO::PARAM_STR); $query->execute();
Таким образом, вам не нужно санировать ваш запрос.
Не дезинфицируйте входные данные. Просто убедитесь, что вы действительно пишете в базу данных, какие данные предоставляются (т. Е. Защищают от SQL-инъекции), а затем избегают вывода.
Для защиты от SQL-инъекции используйте связанные параметры . Чтобы избежать выхода, используйте htmlspecialchars на веб-страницах и любую другую кодировку, соответствующую заданному вами средству.
Просто помните, что вам нужно сделать оба вышесказанного. Если вы только защитите себя от атак SQL-инъекций, вы все равно оставите свой сайт открытым для атак XSS.