2017-07-17 25 views
1

下面是一个简化我的代码:在DOM中使用GET参数的安全方式?

$html = "<a class='myclass' href='/path?arg='" . $_GET['param']. "'>mylink</a>"; 

今天,我正在读关于XSS攻击,我觉得我的代码是在XSS攻击。无论我不确定,但它闻到了这一点。

无论如何,如果我的想法是正确的,我该如何避免?基于一些研究,一种方法是使用strip_tags()。现在我想知道,我可以依靠它吗?这足够好吗?

+0

嘿,是的,你可以自己尝试一下。只需通过赞成你的?param =值。正如这个答案指出:https://stackoverflow.com/questions/3605629/prevent-xss-with-strip-tags你有2个选项。 strip_tags或编码HTML。无论哪种方式都会阻止XSS。 – IsThisJavascript

+1

strip_tags()在你的情况下是不够的,想象一下当你调用'index.php?param ='onclick ='alert(1)'时你的输出变成什么样子,所以你需要的是htmlspecialchars() –

+0

@ WillParky93读取任务,回答你仔细地链接,它清楚地表明,strip_tags()不足以防止XSS –

回答

-1

,每当你想输出从用户传来的参数,您应该使用htmlspecialchars()

$variable = htmlspecialchars($_GET['param'], ENT_QUOTES, 'UTF-8');

+0

此功能用于获取正确的HTML编码。他正在构建一个URL。事实上,空格,问号和其他一些不会逃脱。他的网址将不正确,如果他使用htmlspecialchars。 –

1

这是关于编码一些与正确的函数。 总是看你想要的产品,然后选择编码器!

样品:

当你正在构建HTML其良好的使用用htmlspecialchars和/或ヶ辆。

当你构建SQL时,它很适合用于mysql PDO :: quote或mysqli_real_escape_string。

答:

在你的情况,你正在建立一个网址。为此,您需要使用urlencode

此外,您还需要转义它以纠正与htmlentities的HTML,因为您正在下一步构建HTML。 请参阅PHP手册中的示例 - > urlencode链接(示例#2)。