|
|
|
|
|
для: Trianon
(10.10.2006 в 16:39)
| | Ага... спасибо | |
|
|
|
|
|
|
|
для: Shorr Kan
(10.10.2006 в 07:35)
| | Пожалуйста:
$name = "O'Relly";
$column = "company";
$filter = mysql_escape_string("$column = '$name'");
$sql = "SELECT * FROM tab WHERE $filter". | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2006 в 19:48)
| | Можете привести пример(ы) некорректного формирования (с ипользованием mysql_escape_string) той или иной переменной, использующейся в каком-либо запросе? | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.10.2006 в 19:38)
| | В таком варианте - невозможна. Поскольку $where не читается из входных параметров, а формируется из постоянной части "where=" и литерала (причем для создания значения последнего применяется mysql_escape_string.) И формируется корректно при любых значениях входных параметров. | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2006 в 19:19)
| | Значит, при использовании
SELECT * FROM tbl WHERE $where
sql-инъекция - возможна? $where формируется исходя из всяких событий, связанных с get-параметрами.
Примерно так формируется:
<?
$where='';
if(isset($_GET['param'])){$where="param='".mysql_escape_string($_GET['param'])."'";}
?>
|
| |
|
|
|
|
|
|
|
для: Shorr Kan
(09.10.2006 в 18:44)
| | >Если в числовое поле (при НЕ использовании кавычек) передать кавычку для sql-injection - поможет ли Mysql_escape_string в этом случае? Пусть даже и побочным эффектом.
Нет, не поможет. Никаким.
Если окружать числовое значение кавычками - поможет.
Если окружать числовое значение кавычками - числовое значение станет текстовым. И к нему можно будет применить все предыдущие рассуждения. То, что в контексте числовых полей сервер сам потом преобразует текстовое поле с числовым содержимым в число, вопрос пятнадцатый. Тем более, что не всякий сервер преобразует.
Но если не окружать - поможет?
нет. | |
|
|
|
|
|
|
|
для: Unkind™
(09.10.2006 в 18:22)
| | Вы меня поняли слишком буквально... весь мой вопрос состоит лишь в том - действует ли mysql_escape_string так же, будучи без кавычек, как если бы использовалась с кавычками...
$var=mysql_escape_string($_GET['var']);
mysql_query("SELECT * FROM tbl WHERE stolb='$var';");
mysql_query("SELECT * FROM tbl WHERE stolb=$var;");
аналогично ли действие mysql_escape_string для этих двух mysql_query ?
Вот каков мой вопрос... всего лишь... | |
|
|
|
|
|
|
|
для: Trianon
(09.10.2006 в 18:33)
| | Если в числовое поле (при НЕ использовании кавычек) передать кавычку для sql-injection - поможет ли Mysql_escape_string в этом случае? Пусть даже и побочным эффектом. Если окружать числовое значение кавычками - поможет. Но если не окружать - поможет? | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.10.2006 в 17:31)
| | Кавычки ставятся не вокруг переменной, а вокруг текстового значения, тем самым образуя текстовый литерал. Вот в этом самом текстовом значении некторые символы должны (в случае их присутствия) быть экранированы символом 'обратный слэш'.
Функция mysql_escape_string предназначена именно для преобразования текста в литерал, а не для защиты от уязвимости.
Защита от уязвимости - её побочный эффект.
Точнее даже так: Сама по себе уязвимость "sql-injection через текстовый литерал" есть не что иное как следствие некорректного формирования литерала, и в правильно сформированном запросе просто невозможна.
Эта функция никак не сможет помочь во всех других случаях динамического построения запроса. В частности, когда в запрос передаются числа, имена полей, таблиц, и пр. | |
|
|
|
|
|
|
|
для: Shorr Kan
(09.10.2006 в 17:31)
| | Если $var - цифра, то Вам вообще лучше написать что-то вроде
<?php
$var = (int) $_GET['var'];
//Или
$var = intval($_GET['var']);
?>
|
есть ли уязвимость?
Можно подставить 1, admin = 1 И опять я должен стать админом. | |
|
|
|
|