Что мне нужно сделать, чтобы избежать при отправке запроса?

голоса
18

При выполнении запроса SQL, вы должны очистить ваши строки или пользователи могут выполнить вредоносный SQL на своем сайте.

Я обычно просто имею функцию escape_string (л), который:

  • Заменяет побеги ( \) с двойным побегами ( \\).
  • Заменяет одиночные кавычки ( ') с беглыми одинарными кавычками ( \').

Является ли это адекватным? Есть ли дыра в моем коде? Есть библиотека, которая может сделать это быстро и надежно для меня?

Я хотел бы видеть изящные решения в Perl, Java и PHP.

Задан 05/08/2008 в 19:45
источник пользователем
На других языках...                            


11 ответов

голоса
7

Для обеспечения максимальной безопасности, производительности и правильности использования подготовленных заявлений. Вот как сделать это с большим количеством примеров на разных языках, в том числе PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Ответил 05/08/2008 d 20:38
источник пользователем

голоса
2

Я также хотел бы избежать комментарии (двойной дефис)

--
Ответил 05/08/2008 d 19:46
источник пользователем

голоса
1

Большая вещь для использования в PHP является PDO . Это занимает много догадок из решения безопасности вашего SQL (и все ваша SQL вещей в целом). Он поддерживает подготовленные заявления, которые идут длинный путь к срыву SQL Injection атак.

Отличный учебник по ПДО включена в книге The PHP Anthology 101 Основные советы, хитрости & Hacks от Davey Шафик и т.д. 2nd Ed . Делает обучение ветра и отлично в качестве ссылки. Я даже больше не нужно думать ни о чем, кроме фактического SQL - запроса.

Ответил 05/08/2008 d 20:28
источник пользователем

голоса
0

В запросе MySQL, при использовании LIKE, а также убедитесь, чтобы избежать «_» символы, как это не ускользнуло от mysql_real_escape_string.

Для справки, проверьте здесь

Ответил 14/10/2008 d 05:57
источник пользователем

голоса
0

Используйте подготовленные заявления.

Ответил 16/09/2008 d 22:14
источник пользователем

голоса
0

MySQL в C API имеет собственный mysql_escape_string(). Используя его , или это эквивалент будет лучше.

Ответил 14/08/2008 d 18:59
источник пользователем

голоса
0

Используйте Подготовленные / параметризованные запросы!

Ответил 05/08/2008 d 20:55
источник пользователем

голоса
0

В PHP, я использую эту и я ценю каждый комментарий по этому поводу:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

Требуется еще одна проверка, если поле может быть NULL:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

Вот это удовольствие! (Надеюсь, что сообщение будет правильно отправить подчёркивание и не & # 95;)

Ответил 05/08/2008 d 20:21
источник пользователем

голоса
0

Вы лучше использовать подготовленные заявления с заполнителями. Вы используете PHP, .NET ... в любом случае, подготовленные заявления, обеспечит более высокий уровень безопасности, но я мог бы предоставить образец.

Ответил 05/08/2008 d 19:48
источник пользователем

голоса
0

Какой язык используется? Похоже, что в значительной степени все они имеют встроенный SQL эвакуационных функций, которые были бы лучше использовать.

Например, PHP имеет mysql_real_escape_string и addslashes .

Ответил 05/08/2008 d 19:46
источник пользователем

голоса
-1

Я не уверен, что если MySql поддерживает параметризованные запросы, если это так, вы должны приложить усилия, чтобы пройти этот маршрут. Это позволит обеспечить ввод пользователей не может ничего злонамеренного сделать.

В противном случае некоторые «плохие» символы в дополнение к тому, что вы сказали бы точку с запятой (;) и комментарии (- и / * * /).

Ответил 05/08/2008 d 19:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more