Лучшая безопасность $ _GET

Мой PHP очень ржавый. У меня есть хеш-файл md5, который передается через скрипт, а затем я хватаю его так:

$id = $_GET['id']; 

Очевидно, здесь есть риск для безопасности … Я думал о проверке длины строки, чтобы убедиться, что это 32 символа, но это не кажется мне очень надежным. Что еще я могу сделать, чтобы сделать его более безопасным?

благодаря

Вы можете проверить с помощью регулярного выражения, чтобы убедиться, что он состоит только из буквенно-цифровых символов.

Например, что-то вроде этого (мой PHP тоже ржавый):

 if(preg_match("/^[A-Fa-f0-9]{32}$/", $id) > 0) { // All good } 

Вы можете использовать preg_match чтобы скрыть наличие только alnum и 32 длины.

Это зависит от того, что вы хотите сделать с идентификатором. Если вы создаете выбор mysql с этим, вы должны добавить mysql_real_escape_string ( php.net/mysql_real_escape_string ). В целях вывода вы можете просто преобразовать строку в html-объекты с htmlentities ( php.net/htmlentities ) или использовать расширение фильтра ( php.net/filter )

  1. Сделайте какие-то «фильтры» и примените их к $ _GET ['id'] var, среди этих фильтров вы можете проверить длину, тип, допустимые типы символов, необходимые или нет …

  2. Передайте произвольную сгенерированную строку (хешированный) в качестве скрытого элемента в вашей форме при каждом рендеринге формы, сохраните строку в генерации в сеансе и в форме sumbit для этого сначала, если они не то вам не нужно проверять идентификатор или другие отправленные элементы.

  3. Используйте пост вместо того, чтобы добраться туда, где это возможно.

Сначала я предполагаю, что вы используете> = PHP5.2. Я бы посоветовал вам использовать PHP5.3, потому что он быстрее, даже не изменяя код. Я использую расширение фильтра для защиты своей кодовой базы.

 /* prevent XSS. */ $_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 

Пример использования ctype-alnum :

 if (strlen($id) == 32 && ctype_alnum($id)) exit('pass'); else exit('no'); 

Я бы порекомендовал посмотреть на безопасность с помощью супергеллов PHP