2

我努力删除通过 URL 传递参数时的特殊字符,以防入侵者注入,例如我有以下 URL:

www.sitename.com/people?job=manager

alert在参数之后添加了一个脚本,如下所示:

www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>

当我运行 URL 时,alert会弹出,这可能会导致通过这种技术检索站点信息的漏洞。我将使用$_REQUEST获取传递参数来生成结果。这是我可以在下面应用的任何逃避 URL 注入技术的方法吗?

$job = $_REQUEST["job"];

感谢您的建议。

4

7 回答 7

4

您需要在所有变量上使用htmlentities()or htmlspecialchars()withENT_QUOTES参数。

例如$job

$job = htmlentities($_REQUEST["job"], ENT_QUOTES);

不需要转义 url 参数中的特殊字符。

于 2018-11-13T15:09:09.473 回答
0

您可以使用strip_tags()

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

或使用常规 Exp--

$data = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi', '', $data);
于 2012-06-29T06:55:06.933 回答
0

使用htmlspecialchars转义特殊的 html 字符或使用strip_tags从字符串中删除所有标签。

于 2012-06-29T06:56:26.660 回答
0

首先不要使用 $_REQUEST并且为了防止 CSRF 攻击,您可以使用html_entities()strip_tags().

如果您希望允许某些标签,您可以使用HTML purifier

于 2012-06-29T06:57:55.403 回答
0

像这样的网址

www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>

本身不会做任何有害的事情。

像这样的 URL,像这样的任何值,直接输出到 HTML中当然会导致HTML 注入。这就是为什么你需要对它进行HTML 转义

<?php $url = 'www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>'; ?>

<a href="<?php echo htmlspecialchars($url, ENT_QUOTES); ?>">Click here</a>
于 2012-06-29T06:59:21.880 回答
0

使用 urlencode 函数。访问https://www.php.net/manual/en/function.urlencode.php了解更多信息。

于 2019-04-14T17:13:24.000 回答
0

相反,您可以使用以下代码直接过滤您的输入:

$job = filter_input(INPUT_GET, 'job', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
于 2021-04-12T15:31:56.600 回答