Я хотел бы быть уверен, что я не использовал $ _POST или $ _GET так, как это мог бы использовать злоумышленник (XSS-атаки, SQL-инъекции). Чтобы найти все строки, где я использовал $ _GET или $ _POST, я использовал эту команду:
egrep "_GET|_POST" -r -i MyFolder > dangerousUse.txt
dangerousUse.txt имеет 439 строк. Если я буду искать так:
egrep "\$_GET|\$_POST" -r -i MyFolder > dangerousUse.txt
dangerousUse.txt имеет 0 строк. Если я буду искать так:
egrep "_GET\[|_POST\[" -r -i MyFolder > dangerousUse.txt
dangerousUse.txt имеет 385 строк. Я думаю, что это число, которое я хочу, но я бы тоже хотел, чтобы $ -синхронизировался.
Мой первый вопрос: почему не работает вторая команда egrep?
Теперь я уверен, что ввод используется правильно, если была применена одна из следующих команд:
mysql_real_escape_string(htmlspecialchars($input))
или mysql_real_escape_string ( htmlspecialchars ( $input ) )
или другие комбинации с пробелами.
intval($input)
isset($input)
$input ==
или == $input
Как мне найти только те строки, где $ _POST или $ _GET используются без этих функций? Также было бы хорошо удалить строки в dangerousUse.txt, где эти функции применяются к каждому $ _POST или $ _GET в этой строке.
редактировать:
egrep '\$_GET\[|\$_POST\[' -r -i MyFolder > dangerousUse.txt
работает, спасибо VGE за первую часть ответа. Теперь опасный пользовательский файл имеет 385 строк. Но второй для меня важнее.
для второй части, egrep -v
инвертирует совпадения:
egrep '(isset|intval|mysql_real_escape_string\(htmlspecialchars|md5|datum_anpassen)[\w]*\(\$_' -i -v dangerousUse.txt > dangerousUse2.txt