miker059
@miker059
Коротко не получится

Будут ли проблемы с безопасностью при генерировании имени метода из имени поля формы?

Вопрос наверно звучит запутано, но на деле все проще:

есть форма для фильтра типа:
<form action method="post">
  <input name="func1" value="1" type="radio"/>
  <input name="func1" value="2" type="radio"/>

  <input name="func2[]" value="1" type="checkbox"/>
   <input name="func2[]" value="2"  type="checkbox"/>

   <input type="submit" value="Ok"/>
</form>


(чисто для примера)

запрос с этой формы передается методу некоего класса, который производит фильтрацию некоего массива, в зависимости от того, что пользователь на выбирал в форме, как так:

<? 

class Filter{
	
//Основной метод вызываемый извне
static public function getFilteredArray($array, $filters){
	foreach($filters as $key1 => $filter){
			if(method_exists($this, $key1)){
				$tmp = array();
				foreach($array as $key2 => $value){
					if($this->$key1($value, $filter)) $temp_arr += [$key2 => $value];
				}
				$array = $tmp;
			}
		}
	}
	
	private function func1($item, $filter){
		//обрабатываем и возвращаем true или false
	}
	private function func2($item, $filter){
		//обрабатываем и возвращаем true или false
	}
}


Соответственно на странице, на которую попадаем после нажатия Ок будет примерно это:
<?
$filter = $_POST;
$filterArray = Filter::getFilteredArray($array, $filter); //$array это некий массив который необходимо отфильтровать


Собственно, вопрос не в том будет работать или нет, так как уже работает (здесь в примере возможно есть ошибки, так как писал по памяти), а вопрос в том безопасно ли использовать такой подход (использование параметры из POST запроса в виде имен методов вызываемых динамически. На данный момент в классе есть метод который проверяет все данные в POST через htmlspecialchars (в примере ее нету), достаточно ли такой проверки?
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
Выкиньте и забудьте. Если нужно что-то фильтровать в кастомном проекте, смотрите сюда - https://github.com/auraphp/Aura.Filter
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы