У меня есть этот код как анти-HTML и SQL инъекций для онлайн-игры, но он не работает и выдает мне следующую ошибку:
Fatal error: Only variables can be passed by reference
Вот мой код:
$_POST = str_replace('<', '>', '\'', '\'', '\\', '<', '>', '"', '' ', '\', $_POST);
$_GET = str_replace('<', '>', '\'', '\'', '\\', '<', '>', '"', ''', '\', $_GET);
Это касается первой из двух строк, но я уверен, что проблема будет и со второй. Я не очень хорош в php, и это файлы, которые я взял из Интернета.
Как я могу решить это?
Вам не нужно реализовывать свой собственный XSS-фильтр, так как он уже существует один
И вы можете воспользоваться этим следующим образом:
$_POST = filter($_POST);
$_GET = filter($_GET);
function filter(array $value) {
return is_array($value) ? array_map(__FUNCTION__, $value) : htmlentities($value);
}
Это также отфильтрует вложенные массивы (если ваш ввод был похож name[]
)
Может быть так:
$post_vars = array();
for ($i=0; i<count($_POST); $i++)
{
$post_vars[$i] = str_replace('<', '>', '\'', '\'', '\\', '<', '>', '"', '' ', '\', $_POST[$i]);
}
То же самое касается массива $ _GET.