код
<?php include_once ($_SERVER['DOCUMENT_ROOT'].'/connect/include.php');
if (isset($_GET['id']))
$id = $_GET['id'];
if($_GET['id']){
$id2 = preg_replace('%[^0-9]+%', '', $id);
$a = mysql_query("SELECT `name` FROM users WHERE `id`='$id2'");
$aa = mysql_fetch_array($a);
$name = $aa['name'];
if(empty($id2)){ echo 'Такого пользователя не существует'; } else {
echo ''.$name.'';
}
}
?>
preg_replace все цифры буквы кавычки удалила оставила только цифры, осуществила поиск по новой переменной с цифрами и вывела имя запрошеного ida на экран, если такого пользователя нет то выводим сообщение "Такого пользователя не существует", по моему инъекция тут не прокатит, или я ошибаюсь?
Спустя 4 минуты, 48 секунд (30.09.2011 - 08:04) Alexey_2011 написал(а):
if(empty($id2)){ echo 'Такого пользователя не существует'; } else {
echo ''.$name.'';
исправил
if(empty($name)){ echo 'Такого пользователя не существует'; } else {
echo ''.$name.'';
Спустя 9 минут, 4 секунды (30.09.2011 - 08:13) ApuktaChehov написал(а):
$id2 = (int)$id;
Спустя 6 минут, 20 секунд (30.09.2011 - 08:20) Alexey_2011 написал(а):
можно и так, я интересуюсь мой пример обезопасил скрипт от инъекции, он защищен на 100%?
Спустя 11 минут, 18 секунд (30.09.2011 - 08:31) ApuktaChehov написал(а):
Ну вроде как да. Только для чего такие извращения с регулярками?
Спустя 2 минуты, 23 секунды (30.09.2011 - 08:33) Alexey_2011 написал(а):
новичек я и мало функций знаю, сегодня дописал некоторые скрипты и решил защитить их от инъекций, про (int) узнал только сегодня ночью) переделаем, спасибо за ответ!)
Спустя 10 минут, 2 секунды (30.09.2011 - 08:43) linker написал(а):
Всё это записывается так
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;но можно и вообще в три строчки.
$a = mysql_query("SELECT `name` FROM users WHERE `id` = " . $id);
if ($aa = mysql_fetch_array($a))
echo $aa['name'];
else
echo 'Такого пользователя не существует';
Спустя 2 часа, 37 минут, 22 секунды (30.09.2011 - 11:21) Alexey_2011 написал(а):
linker Буду пользоваться вашим методом спасибо
Спустя 22 минуты, 27 секунд (30.09.2011 - 11:43) Игорь_Vasinsky написал(а):
Этот "метод"
первая его строчка - называется "тернарный оператор", помогает избавиться от нескольких строчек использования оператора if else
В моём журнале есть описание.
первая его строчка - называется "тернарный оператор", помогает избавиться от нескольких строчек использования оператора if else
В моём журнале есть описание.
Спустя 8 минут, 4 секунды (30.09.2011 - 11:51) Winston написал(а):
Только вместо этого
Цитата (linker @ 30.09.2011 - 08:43) |
if ($aa = mysql_fetch_array($a)) |
Пиши
if ($aa = mysql_fetch_assoc($a))
Спустя 33 минуты, 51 секунда (30.09.2011 - 12:25) linker написал(а):
Да, точно, не обратил внимание.
Спустя 8 минут, 41 секунда (30.09.2011 - 12:34) Игорь_Vasinsky написал(а):
Winston
Ну чтож ты не объяснил то почему?
Вообщем mysql_fetch_array() - создаёт 2 массива: индексный и ассициативный
а mysql_fetch_assoc - только ассициативный
Таз зачем те ресурсы тратить? если ты пользуешь ассициативный массив на выходе. Вот по этому.
Ну чтож ты не объяснил то почему?
Вообщем mysql_fetch_array() - создаёт 2 массива: индексный и ассициативный
а mysql_fetch_assoc - только ассициативный
Таз зачем те ресурсы тратить? если ты пользуешь ассициативный массив на выходе. Вот по этому.
Спустя 17 часов, 23 минуты, 13 секунд (1.10.2011 - 05:57) Alexey_2011 написал(а):
спасибо всем за ответы
Спустя 1 час, 14 минут, 55 секунд (1.10.2011 - 07:12) imbalance_hero написал(а):
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/connect/include.php';
if(isset($_GET['id'])) {
$res = mysql_query("
SELECT `id`
FROM `users`
WHERE `id`='".(int)$_GET['id']."'
LIMIT 1
");
if(!mysql_num_rows($res))
echo 'Такого пользователя не существует';
else
echo $name;
}
?>
Спустя 3 минуты, 18 секунд (1.10.2011 - 07:15) Alexey_2011 написал(а):
С числами разобрались, еще один вопросик по поводу sql инъекций и xss атак
Можно ли как то провести xss атаку или sql инъекцию обойдя вот этот фейс контроль указанный ниже?
<?php include_once ($_SERVER['DOCUMENT_ROOT'].'/connect/include.php');
$text =$_POST['text'];
if ($_POST['send']){
$text2 = htmlentities($text, ENT_QUOTES);
$text3 = mysql_real_escape_string($text2);
$ins="INSERT forum SET `otprav`='{$_SESSION['name']}', `words`='$text3'";
mysql_query($ins) or die ("");
}
?>
Можно ли как то провести xss атаку или sql инъекцию обойдя вот этот фейс контроль указанный ниже?
$text2 = htmlentities($text, ENT_QUOTES);
$text3 = mysql_real_escape_string($text2);
Спустя 1 минута, 8 секунд (1.10.2011 - 07:16) imbalance_hero написал(а):
Я бы не использовал htmlentities, а при выводе просто: echo htmlspecialchars($text);
И ещё, посмотри мой пример, что я выше дал, это я обработал и сделал красивый и удобный тебе скрипт. Обрати внимание на стиль, потому что у тебя его вообще нет!
И ещё, посмотри мой пример, что я выше дал, это я обработал и сделал красивый и удобный тебе скрипт. Обрати внимание на стиль, потому что у тебя его вообще нет!
Спустя 29 минут, 7 секунд (1.10.2011 - 07:45) Alexey_2011 написал(а):
Цитата (imbalance_hero @ 1.10.2011 - 04:12) |
|
А для чего вы в конце вставляете LIMIT 1? просто у меня все запросы в базу которые по id ищутся без лимита написаны, я когда писал скрипты подумал что база должна понимать сколько ей нужно искать значений по id то есть 1 раз, так как у id прописан auto_increment и второго такого значения не может быть, например двух id с значением 45?
Мне тоже нужно вставлять лимит после таких запросов?
И данный пример не какого имени не выводит на экран, я вывожу теперь данные вот так
<?php
include_once $_SERVER['DOCUMENT_ROOT'].'/connect/include.php';
if(isset($_GET['id'])) {
$a = mysql_query("SELECT `name` FROM users WHERE `id` ='".(int)$_GET['id']."'");
if ($aa = mysql_fetch_assoc($a))
echo $aa['name'];
else
echo 'Такого пользователя не существует';
}
?>
Правильно?
Спустя 38 минут, 59 секунд (1.10.2011 - 08:24) Alexey_2011 написал(а):
Цитата (imbalance_hero @ 1.10.2011 - 04:16) |
Я бы не использовал htmlentities, а при выводе просто: echo htmlspecialchars($text); |
Можно и так, можно ли обойти данные функции и провести xss атаку или sql инъекцию?
Спустя 2 часа, 35 минут, 4 секунды (1.10.2011 - 10:59) imbalance_hero написал(а):
Alexey_2011
конечно же нет Их придумали, чтобы обойти XSS, поэтому их можно обойти?
конечно же нет Их придумали, чтобы обойти XSS, поэтому их можно обойти?