Мой 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 )
Сделайте какие-то «фильтры» и примените их к $ _GET ['id'] var, среди этих фильтров вы можете проверить длину, тип, допустимые типы символов, необходимые или нет …
Передайте произвольную сгенерированную строку (хешированный) в качестве скрытого элемента в вашей форме при каждом рендеринге формы, сохраните строку в генерации в сеансе и в форме sumbit для этого сначала, если они не то вам не нужно проверять идентификатор или другие отправленные элементы.
Используйте пост вместо того, чтобы добраться туда, где это возможно.
Сначала я предполагаю, что вы используете> = 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