PHP在URL参数中转义特殊字符

时间:2012-06-29 06:49:37

标签: php escaping

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

www.sitename.com/people?job=manager

我在以下参数之后添加了警告脚本:

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

当我运行网址时,会弹出警报,这可能会通过此技术导致检索网站信息中的漏洞。我将使用$ _REQUEST来获取传递参数来生成结果,是否有任何可以逃避URL注入技术的方法,我可以将其应用到下面?

$job = $_REQUEST["job"];

感谢您的建议。

7 个答案:

答案 0 :(得分:1)

您需要在所有变量上使用带有htmlentities()参数的htmlspecialchars()ENT_QUOTES

例如$job

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

首先don't use $_REQUEST并且为了防止CSRF攻击,您可以使用html_entities()strip_tags()

如果您想要允许某些标记,可以使用HTML purifier

答案 4 :(得分:0)

网址 ,如

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

不会做任何有害的事情。

像这样的网址,任何这样的值,明显输出到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>

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

$job = filter_input(INPUT_GET, 'job', FILTER_SANITIZE_FULL_SPECIAL_CHARS);