Вопрос

Использование 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 экранирование аргументов вашего запроса.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top