Спустя 3 часа, 4 минуты, 54 секунды (16.04.2010 - 18:45) Jinus написал(а):
эээм, а не проще было написать некий парсер, который запрещал бы все ф-ции, которые не разрешены?
Спустя 7 часов, 15 минут, 1 секунда (17.04.2010 - 02:00) vasily написал(а):
Цитата (Jinus @ 16.04.2010 - 15:45) |
эээм, а не проще было написать некий парсер, который запрещал бы все ф-ции, которые не разрешены? |
Дело в том, что я не знаю как его написать.
Спустя 26 минут, 11 секунд (17.04.2010 - 02:26) krasilich написал(а):
$array = array(); //массив с перечнем запрещенных функций
$code; // то, что приходит из формы
str_replace($array, '', $code);
Это самый элементарный вариант, который просто вырежет не нужные слова, если таковые имеются.
Спустя 4 часа, 35 минут, 13 секунд (17.04.2010 - 07:01) glock18 написал(а):
все опасные функции никогда не будешь знать. хоть завырезайся.
vasily
список достаточно большой, и на первый взгляд, опасные функции запрещены. но очень вероятно, что не все
vasily
список достаточно большой, и на первый взгляд, опасные функции запрещены. но очень вероятно, что не все
Спустя 22 минуты, 27 секунд (17.04.2010 - 07:23) twin написал(а):
В таких случаях предпочтительнее разрешительная политика, а не запретительная. Удалить все, кроме разрешенных.
Спустя 1 час, 47 минут, 19 секунд (17.04.2010 - 09:11) vasily написал(а):
Цитата (twin @ 17.04.2010 - 04:23) |
В таких случаях предпочтительнее разрешительная политика, а не запретительная. Удалить все, кроме разрешенных. |
А как это можно сделать?
Спустя 50 минут, 56 секунд (17.04.2010 - 10:02) twin написал(а):
Ну как вариант - заменить все разрешенные функции на какие то токены. Потом удалить все, что имеет признак функций. Потом вернуть обратно то, что меняли. Если не понятно, через часок освобожусь, напишу код.
Спустя 1 час, 55 минут, 25 секунд (17.04.2010 - 11:57) vasily написал(а):
Цитата (twin @ 17.04.2010 - 07:02) |
Ну как вариант - заменить все разрешенные функции на какие то токены. Потом удалить все, что имеет признак функций. Потом вернуть обратно то, что меняли. Если не понятно, через часок освобожусь, напишу код. |
Буду благодарен за код.
Спустя 1 час, 20 минут, 7 секунд (17.04.2010 - 13:17) twin написал(а):
// Текст от юзера
$text = 'unlink(); implode(",", $var); trim ($var); ';
// Разрешенные функции
$accept_func = array(
'explode',
'implode',
'trim'
);
$check_text = preg_replace("#".implode("\s*\(|", $accept_func)."\s*\("."#i", '', $text);
if(preg_match("#[a-z0-9_]+\s*\(#i", $check_text))
exit('Куда прешь?');
else
echo 'Хороший мальчик<br>'. $text;
Спустя 19 минут, 52 секунды (17.04.2010 - 13:37) vasily написал(а):
Цитата (twin @ 17.04.2010 - 10:17) |
// Текст от юзера |
А он обнаружит к примеру запрещенную функцию mkdir в следующем коде:
<?php
$mk="mk"."d"."ir";
$mk("folder");
?>
Спустя 10 минут, 21 секунда (17.04.2010 - 13:47) twin написал(а):
Кто мешает попробовать?
Спустя 51 минута, 33 секунды (17.04.2010 - 14:39) vasily написал(а):
Цитата (twin @ 17.04.2010 - 10:47) |
Кто мешает попробовать? |
Работает!
Спасибо за код!