|
|
|
| В главе II 4.4 приводится пример поиска пользователя
<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name value="<?= $_POST['name'] ?>"></td></tr>
<tr><td> </td><td><input type=submit value='Искать'></td></tr>
</form>
</table>
<?php
if(!empty($_POST))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Производим поиск пользователя с именем $_POST['name']
$query = "SELECT * FROM userslist
WHERE name
LIKE '$_POST[name]%'
ORDER BY name";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка - ".mysql_error());
while($user = mysql_fetch_array($usr))
{
echo "Имя пользователя - $user[name]<br>";
}
}
?>
|
и дается ответ как избежать SQL инъекции с использованием конструкции UNION
<table>
<form method=post>
<tr><td>Имя:</td><td><input type=text name=name value="<?= $_POST['name'] ?>"></td></tr>
<tr><td> </td><td><input type=submit value='Искать'></td></tr>
</form>
</table>
<?php
if(!empty($_POST))
{
// Устанавливаем соединение с базой данных
require_once("config.php");
// Если режим магических кавычек не включён
// обрабатываем поле $_POST['name'] функцией
// mysql_escape_string()
if(!get_magic_quotes_gpc())
{
$_POST['name'] = mysql_escape_string($_POST['name']);
}
// Производим поиск пользователя с именем $_POST['name']
$query = "SELECT * FROM userslist WHERE name LIKE '%o%' ORDER BY name";
$usr = mysql_query($query);
if(!$usr) exit("Ошибка - ".mysql_error());
while($user = mysql_fetch_array($usr))
{
echo "Имя пользователя - $user[name]<br>";
}
}
?>
|
Вопрос:
Почему даный ответ не затрагивает защиты от явы, с ее же помощью тоже можно вызвать SQL или как-то напортачить используя простой код
"><script>alert('');</script><" | |
|
|
|
|
|
|
|
для: smit272
(10.07.2007 в 15:06)
| | Цит.:
$query = "SELECT * FROM userslist WHERE name LIKE '%o%' ORDER BY name";
|
может здесь всё-таки...
$query = "SELECT * FROM userslist WHERE name LIKE '%$_POST[name]%' ORDER BY name";
|
?
>Почему даный ответ не затрагивает защиты от явы, с ее же помощью тоже можно вызвать SQL или как-то напортачить используя простой код
>"><script>alert('');</script><"
Цитирую вас же:
"дается ответ как избежать SQL инъекции с использованием конструкции UNION"
Конкретно по данной теме авторы ответ дали (обработка данных функцией mysql_escape_string).
>защиты от явы, с ее же помощью тоже можно вызвать SQL
Очень интересно, ниразу с этим не сталкивался, покажите пример.
XSS-атака с помощью JavaScript здесь тоже невозможна (возможна, только в случае если в базе в поле "name" хранятся некорректные данные, но это уже касается скорее скрипта регистрации).
Но если вас волнует именно этот момент, замените:
echo "Имя пользователя - $user[name]<br>";
|
на:
echo "Имя пользователя - ".htmlspecialchars($user['name'])."<br>";
|
Это предупредит случаи с некорректными данными в базе. | |
|
|
|
|
|
|
|
для: sms-send
(10.07.2007 в 22:10)
| | так сработает то <input type=text name=name value="<?= $_POST['name'] ?>">
Он и обработает яву :)
Понятно и то что этот инпут тоже можно прикрыть htmlspecialchars
Но почему в книжке то пример это не описывает... | |
|
|
|
|
|
|
|
для: smit272
(10.07.2007 в 23:56)
| | Ну вообще-то надо использовать htmlspecialchars() на выходе, а не при записи в базу данных.
В противном случае возможна порча амперсанд-энкодинг представлений символов <, > и, в зависимости от 2ого аргумента, " и/или '. | |
|
|
|
|
|
|
|
для: Unkind
(11.07.2007 в 06:36)
| | >Ну вообще-то надо использовать htmlspecialchars() на выходе, а не при записи в базу данных.
Unkind, а кто против то? | |
|
|
|
|
|
|
|
для: sms-send
(11.07.2007 в 08:17)
| | Мне почему-то показалось, что запись в базу данных была.
Спать надо ночью... | |
|
|
|