SQL иньекции

1. Богдан (23.12.2010 / 23:03)
Как защитится от sql иньекции не используя эту штуку со слешами возле кавычек? А то как-то не красиво получается.

2. Владислав (23.12.2010 / 23:06)
через mysql_real_escape_string() нужно пропускать строку.
$_GET,$_POST,$_SERVER

3. Богдан (23.12.2010 / 23:10)
2. Nervоus, можна поподробнее?

4. Женек (23.12.2010 / 23:50)
<?

$name = $_GET['name'];
$name = mysql_real_escape_string($name); // экранируем спецсимволы

$query = mysql_query("SELECT * FROM table WHERE name='".$name."'");

?>


5. Удаленный (24.12.2010 / 00:32)
А если нет бд

Добавлено через 01:53 сек.
А если нет бд $name = htmlentities(stripslashes($_GET['name']));

6. ZaRiN (24.12.2010 / 01:48)
Если бд нету - нету и sql инъекций ;)

Добавлено через 00:58 сек.
Для защиты от xss достаточно будет htmlspecialchars()

7. valakas (24.12.2010 / 02:17)
тупые вопросы задает имхо

8. ZaRiN (24.12.2010 / 02:59)
Автор, можешь почитать на досуге http://thiswap.com/2010/08/06/bezopasnost-pri-napisanii-skriptov/

9. Константин (24.12.2010 / 07:31)
mysql_real_escape_string

10. iNeeXT (24.12.2010 / 19:18)
<?
/* Функция защиты от нежелательных действий */
function protect($text)
{
	return trim(mysql_real_escape_string(htmlspecialchars($text, ENT_QUOTES, 'utf-8')));
}
и фильтрируешь protect($_POST['name']);

11. smartvbxos7 (25.12.2010 / 00:53)
1, прочитай стать про sql inj by 1dt.w0lf

12. JustZero (25.12.2010 / 12:02)
11: Smart-Man, спасибо) Мне тоже было интересно почитать)

13. Studentsov (25.12.2010 / 13:19)
а вообще надо использовать PDO и проблема решится сама собой

14. Дмитрий (25.12.2010 / 13:37)
DnBinUA (24 Декабря 2010 / 00:48)
Для защиты от xss достаточно будет htmlspecialchars()
htmlspecialchars() недостаточно фильтрует данные. Буквально недавно читал статью. Наткнусь на нее снова - скину тебе почитать.

15. Дмитрий (27.12.2010 / 02:52)
14. LondoN_tm, тогда strip_tags() D

16. Владислав (27.12.2010 / 13:51)
13. Studentsov_нет_ничо1, ничего удобного в нем не вижу, как по мне лучше mysqli.

17. ZaRiN (27.12.2010 / 16:52)
14. LondoN_tm, впервые слышу об этом...

18. smartvbxos7 (27.12.2010 / 20:21)
16, с ним кода больше, он неудобен но производительность лучше mysql на милисекунды)

19. Владислав (28.12.2010 / 02:17)
18. Smart-Man, мне удобен, дело привычки.

20. smartvbxos7 (28.12.2010 / 22:15)
19, у меня мания меньше кода больше производительности)

21. Дмитрий (28.12.2010 / 23:55)
17. mr.Z, htmlspecialchars() — конвертирует только специальные символы (’&’, ‘”‘, ”’, ‘<’ и ‘>’) в HTML сущности (’&amp;’, ‘"’…).

Я считаю, что для удаления возможности быть атакованым xss методом одного htmlspecialchars() не достаточно, так как помимо выполнения HTML-кода, всегда есть возможность испытать скрипт на:
- XSS-нападение с использованием UTF-7 кодировки.
- XSS-нападение с помощью метода TRACE. - экзотика, да? зато работает
- XSS нападение через data
- XSS-нападение через Flash-анимаци. - ActionScript.
- XSS-DOM
- использование ошибок и критических уязаимостей в ПО для проведения XSS.

Добавлено через 02:25 сек.
К тому же если я не ошибаюсь, htmlspecialchars() не фильтрует знак процента "%" что позволяет выполнить команду, зашифрованую в URL сущность. Типа, %20UNION%20SELECT%20*%20FROM..

22. Дмитрий (29.12.2010 / 00:34)
Хорошая статья о фильтрации http://www.codeharmony.ru/materials/17

23. delete (29.12.2010 / 01:21)
22. LondoN_tm, прикольно)

24. ZaRiN (29.12.2010 / 02:39)
21. LondoN_tm, спасибо, возьму на заметку smile

25. ZaRiN (29.12.2010 / 02:58)
Погуглил на счет "XSS-нападение с использованием UTF-7 кодировки" - если кодировка в заголовках явно указана и она не является UTF-7 то этой атаки можно не боятся smile
уже завтра об остальном погуглю)

Добавлено через 01:59 сек.
Под конец описания данного метода опишем основные его неудобства:
1. Работает только с браузером Internet Explorer
2. Код должен находится до тегов определяющих кодировку
3. Перед кодом не должно быть никакого текста, содержащего символы из других кодировок, так как опознавание
кодировки будет происходить именно по этому тексту (а следовательно – не правильно).


26. ZaRiN (29.12.2010 / 03:12)
- XSS нападение через data
тоже в принципе не столь опасно
Использование подобного кода может пригодится на сайтах где пользователи могут публиковать различные ссылки,
которые не проверяются на наличие "http://" в начале строки. Основное неудобство этого метода в том что атака с его
помощью пройдёт только при непосредственном вмешательстве пользователя. То есть пользователь должен либо сам
кликнуть на подобную ссылку, либо ввести её в браузер, находясь на нужной странице. Если, например, JS-код можно
использовать при отсутствии фильтрации адреса изображения:
<img src="javascript:alert(12345);">
и этот код нормально обработается при простом открытии странички, то код транспортируемый с помощью протокола
DATA пользователь должен обязательно вызвать сам.


27. XoPyC (07.01.2011 / 21:17)
вот классик для защиты от sql inj, не идеал, но все же что то...
http://maxmessage.ru/r/3784

28. ramzes (07.01.2011 / 23:42)
27. Queso, ужас
ресурсы не бережем
проверяем и фильтруем все подряд
a=1&b=2&c=3&d=4&e=6&f=7&g=8 и так пока твой цикл (цикл в цикле О_о) не захлебнется на explode
не классика совсем, классика фильтровать только необходимое, только один раз, и только соответствующим типу данных способом, цифры и строки не одно и то же

29. XoPyC (07.01.2011 / 23:58)
28. ramzes, я же написал что код не идеал, причем я eго немного переписал. Этот код я нашел в игре Delefa.

30. ramzes (08.01.2011 / 00:06)
откажись от него, фильтровать надо там где используешь данные, т е перед запросом к бд

31. XoPyC (08.01.2011 / 00:27)
ramzes (8 Января 2011 / 00:06)
откажись от него, фильтровать надо там где используешь данные, т е перед запросом к бд
в большинстве случаев так и делаю, этот код наверно был как cтрахoвкa

32. Владислав (08.01.2011 / 00:44)
$_GET = array_map('mysql_real_escape_string_array', $_GET);
хз будет ли работать, но должно.

33. XoPyC (08.01.2011 / 13:10)
32. ByVlad, ну что ж на досуге попробуем smile

34. ramzes (08.01.2011 / 15:42)
32. ByVlad, это тот же велосипед, только с моторчиком
ну ненадо фильтровать все без разбора

URL: https://visavi.net/topics/16914