Правильный способ дезактивации ввода в MySQL с использованием PDO

поэтому у меня был мой друг, который пытался запустить 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.