Я пытаюсь выучить SQL-инъекцию, чтобы стать белой шляпой, но мне довольно сложно …
Я нашел этот код на сайте, и мне сказали, что это легко.
HTML-код имеет имя пользователя, поля для ввода пароля и кнопку.
if(isset($_POST['autentificare']) && $_POST['autentificare']=='OK' && $_POST['admin']!="" && $_POST['adm_password']!="")
{
$admin=$_POST['admin'];
$adm_password=$_POST['adm_password'];
$login="SELECT admin,password FROM owner where admin='".$admin."' AND password='".$adm_password."' ";
$result_auth=mysql_query($login,$db) or die("Query failed: ".mysql_error()." Actual query: ".$login);
$user_identity;
while($dates = mysql_fetch_object($result_auth))
{
$user_identity=$dates->admin;
$password_ident=$dates->password;
}
if($result_auth && $user_identity==$admin && $password_ident==$adm_password)
{
$_SESSION['adm_username']=$admin;
$_SESSION['adm_password']=$adm_password;
$authval="V";
}
else
{
$authval="D";
}}
Да. Ваш запрос уязвим к SQLi. Я настоятельно рекомендую использовать PDO. Он заботится о том, чтобы избежать запросов для вас. http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Named_Placeholders
Ваше лучшее «оружие» против SQL-инъекций — подготовленные операторы.
Таким образом, вы не смешиваете код с данными … как вы делаете в своих запросах выше.
Итак, конечно … вы уязвимы для SQL-инъекций.
Смешивая код и данные, злоумышленник может отправить входные данные таким образом, что в действительности может изменить форму запроса.
Очевидные проблемы с кодом с точки зрения безопасности / внедрения SQL:
Данные не очищены. Каждый раз, когда вы берете ввод от пользователя и обрабатываете его в запросе, вы хотите очистить его, кодируя любые специальные символы. Есть множество функций, которые могут сделать это, и, так как вы студент, я позволю вам исследовать это немного (изучение того, как найти функции для ваших целей, является жизненно важным навыком в развитии).
Вы не используете связанные параметры (и вы не используете $ mysqli, которым вы должны быть). Связанные параметры помогают построить запрос таким образом, чтобы приложение знало, какие входные данные следует ожидать. Это мешает людям вставлять подзапрос в ваш код.
Пароли хранятся в незашифрованном виде. Пароли всегда должны быть зашифрованы, поэтому, если они украдены, это не так плохо, как если бы они были незашифрованы.
Это должно начать вас.