Может ли этот php-код быть введен sql?

Я пытаюсь выучить 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";

}}

0

Решение

Да. Ваш запрос уязвим к SQLi. Я настоятельно рекомендую использовать PDO. Он заботится о том, чтобы избежать запросов для вас. http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers#Named_Placeholders

1

Другие решения

Ваше лучшее «оружие» против SQL-инъекций — подготовленные операторы.
Таким образом, вы не смешиваете код с данными … как вы делаете в своих запросах выше.

Итак, конечно … вы уязвимы для SQL-инъекций.

Смешивая код и данные, злоумышленник может отправить входные данные таким образом, что в действительности может изменить форму запроса.

1

Очевидные проблемы с кодом с точки зрения безопасности / внедрения SQL:

  1. Данные не очищены. Каждый раз, когда вы берете ввод от пользователя и обрабатываете его в запросе, вы хотите очистить его, кодируя любые специальные символы. Есть множество функций, которые могут сделать это, и, так как вы студент, я позволю вам исследовать это немного (изучение того, как найти функции для ваших целей, является жизненно важным навыком в развитии).

  2. Вы не используете связанные параметры (и вы не используете $ mysqli, которым вы должны быть). Связанные параметры помогают построить запрос таким образом, чтобы приложение знало, какие входные данные следует ожидать. Это мешает людям вставлять подзапрос в ваш код.

  3. Пароли хранятся в незашифрованном виде. Пароли всегда должны быть зашифрованы, поэтому, если они украдены, это не так плохо, как если бы они были незашифрованы.

Это должно начать вас.

0
По вопросам рекламы [email protected]