|
|
|
|
|
для: Trianon
(22.02.2007 в 19:51)
| | Ну да... а не в литерале кавычек не бывает (не считая тех самых кавычек, которые обрамляют строку). Теперь я понял, спасибо. | |
|
|
|
|
|
|
|
для: Shorr Kan
(22.02.2007 в 18:41)
| | Экранирование - это, как, к сожалению, многие понимают, трактуют, рассказывают, вовсе не процедура приготовления из опасной строки его безопасного варианта.
Это лишь способ сделать из текста(или даже двоичного объекта) эквивалентное нутро "строкового литерала".
И потому экранирование:
1. - не изменяет опасность -- не бывает опасных или безопасных строк, или даже опасных данных вообще.
Бывают лишь корректные или ошибочные методы обработки этих данных.
2. без последующего обрамления кавычками - действие совершенно бессмысленное. Поскольку литерал без кавычек не бывает. | |
|
|
|
|
|
|
|
для: Unkind
(22.02.2007 в 18:30)
| | "при помощи UNION SELECT."
Приведите примерчик.
"Во всех будет ошибка. Синтаксическая."
Почему? Лишь потому, что mysql_query не позволяет выполнять два запроса? Или есть другая причина?
"Не придумывайте проблем..."
Я интересуюсь лишь в целях обучения. | |
|
|
|
|
|
|
|
для: JIEXA
(22.02.2007 в 18:27)
| | Плохое отношение. Это не придумывание проблем. Учатся на ошибках. | |
|
|
|
|
|
|
|
для: Shorr Kan
(22.02.2007 в 17:33)
| | Не придумывайте проблем себе - берите числы в одинарные ковычки | |
|
|
|
|
|
|
|
для: Shorr Kan
(22.02.2007 в 17:33)
| | Во всех будет ошибка. Синтаксическая.
Да и вообще, mysql_query() не позволяет выполнять несколько запросов сразу.
Если уж Вы не берете число в кавычки, то убедитесь, что это правда число, иначе есть угроза SQL Injection с помощью UNION SELECT. | |
|
|
|
|
|
|
|
для: Unkind
(22.02.2007 в 13:17)
| | Видимо, я не так выразился...
<?
$where="a='15'"; // нормальный код, который должен был бы быть
$where.=';DELETE FROM tbl'; // подсунутый, дополняется переменная
$where=mysql_escape_string($where); // экранируем
mysql_query("SELECT * FROM tbl WHERE $where"); // и что будет?
?>
|
Вот один из вариантов, который меня смущает. DELETE выполнится?
Вот еще два варианта:
<?
$a=mysql_escape_string("';DELETE FROM tbl");// допустим, из $_GET такое пришло, но мы отэкранировали...
$where="a='".$a."'"; // нормальный код, который должен был бы быть
mysql_query("SELECT * FROM tbl WHERE $where"); // что произойдет здесь?
?>
|
<?
$where=mysql_escape_string("WHERE id='15';DELETE FROM tbl");
mysql_query("SELECT * FROM tbl $where"); // что произойдет здесь?
?>
|
Насколько я понимаю:
В первом случае получается запрос - "SELECT * FROM tbl WHERE a=\'15\';DELETE FROM tbl'"
Во втором - "SELECT * FROM tbl WHERE a='\';DELETE FROM tbl"
В третьем - "SELECT * FROM tbl WHERE id=\'15\';DELETE FROM tbl"
Итог (по-моему) - delete произойдет в первом и в третьем вариантах. Во-втором же просто будет ошибка. | |
|
|
|
|
|
|
|
для: cheops
(22.02.2007 в 12:58)
| | Судя по синтаксису, можно предположить лишь что в хвост SQL-запроса что-то дописывается.
Число это, имя столбца, или вредноносный код - не угадаешь. | |
|
|
|
|
|
|
|
для: Shorr Kan
(22.02.2007 в 05:24)
| | mysql_escape_string() ВСЕГДА одинаково действует. Просто надо понимать что она делает. Ради разнообразия можно вывести на экран запрос и посмотреть, что вы там посылаете СУБД. | |
|
|
|
|
|
|
|
для: Shorr Kan
(22.02.2007 в 05:24)
| | Функция mysql_escape_string() предназначена для экранирования спец-символов в строке. Во втором запросе, судя по синтаксису используется числовой параметр и применение к нему функции mysql_escape_string() не имеет смысла, хотя возможно. | |
|
|
|
|