Не доходит одна фишка.
Допустим есть код
isset($_GET['text']) ? mysql_real_escape_string($_GET['text']) :false;
mysql_query("insert into `table` set `text` = '".$_GET['text']."'"
Естественно в первой строке кода text фильтрируется но во второй строке уже $_GET['text'] применяется без фильтра, так вот вопрос, как PHP обрабатывает такой код? То есть если в первой строке уже фильтрируется get запрос то достаточно или с 2 строки php начинает обрабатывать заного?
вторую строку тож надо фильтовать
Добавлено 29.02.16 в 19:00:50:
че это за гкод у тебя вообще?
$text = isset($_GET['text']) ? mysql_real_escape_string($_GET['text']) : false;
mysql_query("insert into `table` set `text` = '".$text."'"
ну код г да, просто я хочу понять принцип mysql. Тоесть если не фильтрировать и вторую строку то считается уязвимостью?
Razor, фильтровать нужно ВСЕ, что приходит от пользователя!
А если допустим так:
foreach($_GET as $key=>$value){
$_GET[$key]=mysql_escape_string($value);}
mysql_query("insert into `table` set `text` = '".$_GET['text']."'"
Будет ли фильтрироваться text в запросе?
---
Знаю что код говно, хочется уточнить принцип.
Тогда уж
$_GET = array_map('mysql_real_escape_string', $_GET);
вместо
mysql_escape_string
используй
mysql_real_escape_string
но всеравно это говнокод.
foreach быстрее с подобным справляеться.
Wins, Для теста потестил кое что,
Если сделать так:
<?
foreach($_GET as $key=>$value){
$_GET[$key]=mysql_real_escape_string($value);}
echo $_GET['p'];
?>
и вводить http://site/?p=test
То в экран ничего не выводит, пустая белая страница
а если mysql_real_escape_string заменить на htmlspecialchars то всё норм, а почему так?