Sql попытка внедрения PHP 5.2.6 - PullRequest
1 голос
/ 27 июня 2009

Использование 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 _ real _ escape _ в PHP 5.2.6 тогда?

Ответы [ 3 ]

4 голосов
/ 27 июня 2009

Значения могут быть экранированы из-за того, что Волшебные кавычки включены в конфигурации вашего сервера. Магические кавычки считаются очень плохими, в основном по той причине, которую вы упоминаете. Не безопасно полагаться на функцию, которая может или не может быть включена для автоматического сброса ваших входящих данных. намного лучше сделать это самостоятельно во время выполнения.

Для получения дополнительной информации о кавычках Magic, и почему они плохие, и как их отключить, взгляните на некоторые из этих вопросов / ответов SO:

3 голосов
/ 27 июня 2009

Вероятно, ваш PHP-сервер настроен на использование Magic Quotes . Устаревший параметр в PHP, который автоматически экранирует все входящие данные в сценарии PHP. Это устарело и будет удалено в PHP 6. Вот причины Zend для удаления Магических Кавычек.

Лучше не полагаться на «магию», которая заставляет многие вещи работать, но разрушает другие. Явное экранирование ввода более надежно и позволяет лучше проектировать код. Например, не все входные данные должны быть экранированы одинаково.

3 голосов
/ 27 июня 2009

Нет, я не думаю, что вы здесь. Независимо от того, магически ли php экранирует специальные символы в этом примере, интерпретатор не будет выполнять mysql , экранируя ваши аргументы запроса.

Я думаю, очень вероятно, что в этом коде есть уязвимость.

...