Попытка Sql-инъекции PHP 5.2.6
-
20-08-2019 - |
Вопрос
Использование PHP 5.2.6 в XAMPP :
Я читал о sql-инъекциях здесь и попробовал это со следующей формой входа в систему :
<html><body>
<form method='post' action='login.php'>
<input type='text' name='user'/>
<input type='text' name='pass'/>
<input type='submit'/>
</form>
</body></html>
и php - код :
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$query = "Select * from users where user='$user' AND pass='$pass'";
echo $query;
mysql_connect('localhost','root','');
mysql_select_db('test');
$res = mysql_query($query);
if($res) $row = mysql_fetch_assoc($res);
if($row) echo 'yes';
?>
Что я выяснил, так это то, что в переменной $ pass уже были экранированы все специальные символы.Итак, нет ли необходимости использовать mysql_
реальный_
побег_
строка в PHP 5.2.6 тогда?
Решение
Скорее всего, ваш PHP-сервер настроен на использование Волшебные Цитаты.Устаревший параметр в PHP, который автоматически экранирует все входящие данные в PHP-скрипте.Он устарел и будет удален в PHP 6. Вот причины Zend для удаления Волшебных кавычек.
Лучше не полагаться на "магию", которая заставляет работать многие вещи, но ломает другие.Явный экранирование ваших входных данных более надежно и позволяет вам разрабатывать лучший код.Например, не все входные данные должны экранироваться одинаковым образом.
Другие советы
Значения могут быть экранированы из-за Волшебные Цитаты будучи включенным в конфигурации вашего сервера.Волшебные цитаты считаются очень плохими, в основном именно по той причине, которую вы упомянули.Небезопасно полагаться на функцию, которая может быть включена, а может и нет, для автоматического удаления ваших входящих данных.Это так намного лучше сделать это самостоятельно во время выполнения.
Для получения дополнительной информации о волшебных кавычках, почему они плохие и как их отключить, ознакомьтесь с несколькими из этих вопросов / ответов SO:
Нет, я не думаю, что ты здесь прав.Независимо от того, волшебным образом php экранирует специальные символы в этом примере или нет, интерпретатор не будет выполнять специфичный для mysql экранирование аргументов вашего запроса.
Я думаю, что весьма вероятно, что в этом коде есть уязвимость.