защита eval от php-инъекций

ryr

Новичок
защита eval от php-инъекций

По работе столкнулся с кодом вида:

PHP:
eval("function_".$_GET["action"]."();");
Понятно, что такого в коде быть не должно. Но вариант рефакторинга кода или создания массива всех возможных значений этого action отпадает ввиду слишком большого кол-ва возможных значений и ограничения по времени.

Я написал функцию для проверки валидности :


PHP:
function validate_string($str) {
  if (preg_match("/^[a-zA-Z0-9\-_]+$/", $str, $regs))
    return true;
  else
    return false;
}
Интересует насколько это хороший вариант и есть ли более правильные решения?
 

fixxxer

К.О.
Партнер клуба
$func = 'function_' . $_GET['action'];
if (function_exists($func)) $func(); else error();
 

AmdY

Пью пиво
Команда форума
define(CHECK_FUNCTION_NAME, '/^[a-zA-Z0-9\-_]+$/');

if (preg_match(CHECK_FUNCTION_NAME, $str)) {код}
 

Фанат

oncle terrible
Команда форума
это можно предположить.
но мне тоже интересно не про его функцию, а про твою.
 

dimagolov

Новичок
findnext, какие нафиг is_callable и function_exists? это же верх маразма позволять выполнить любую имеющуюся ф-ю, включая все стандартные php
 

BRat

o_0
dimagolov
у ТС же не любая, а начинающаяся с определенного префикса
 

dimagolov

Новичок
BRat, ну и к чему все кроме первого ответа?

кстати, я предпочитаю массив разрешенных ф-й и проверку на попадание в него, например при обработке ajax запросов
 

findnext

Новичок
dimagolov
это было в дополнение, на самом деле нужно заранее определить что можно выполнять а что нет
 

zerkms

TDD infected
Команда форума
если это просто вызов функции - почему не call_user_func?
 
Сверху