我有点困惑,PHP中有这么多函数,有的使用这个,有的使用那个。有人使用:htmlspecialchars()
,htmlentities()
,strip_tags()
等
哪个是正确的,你们通常使用什么?
这是正确的吗(如果有的话,建议我做一个更好的):
$var = mysql_real_escape_string(htmlentities($_POST['username']));
该行可以防止MySQL注入(inject)和XSS攻击?
顺便说一句,除了XSS攻击和MySQL注入(inject)之外,还有其他需要注意的事情吗?
编辑
得出以下结论:
如果我想将字符串插入数据库,则无需使用
htmlentities
,只需使用mysql_real_escape_string
即可。显示数据时,请使用htmlentities()
,这是您的全部意思吗?总结:
插入数据库时使用的
mysql_real_escape_string
将数据输出到网页时使用的htmlentities()
htmlspecialchars()
何时使用? strip_tags()
何时使用? addslashes()
何时使用? 有人可以填写问号吗?
最佳答案
htmlspecialchars()何时使用?htmlspecialchars
与htmlentities
大致相同。区别:字符编码。
两者都编码用于打开标签等的诸如<
,>
,&
等控制字符。htmlentities
还编码来自其他语言的字符,例如变音符号,欧元符号等。如果您的网站是UTF,请使用htmlspecialchars()
,否则请使用htmlentities()
。
strip_tags()何时使用?htmlspecialchars
/entities
对特殊字符进行编码,因此它们会被显示但不会被解释。 strip_tags
删除它们。
在实践中,这取决于您需要做什么。
一个示例:您已经为论坛编写了代码,并为用户提供了一个文本字段,以便他们可以发布内容。恶意用户可以尝试:
pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.com');}, 1000));">kittens</a> here
如果您不执行任何操作,将显示该链接,并且单击该链接的受害者会弹出很多弹出窗口。如果您的输出是htmlentity/htmlspecialchar,则文本将保持原样。如果您删除它,它只会删除标签并显示它:
pictures of kittens here
有时您可能想要混合使用,在其中保留一些标签,例如<b>
(strip_tags
可以在其中保留某些标签)。这也是不安全的,因此最好对XSS使用一些完整的库。斜线
引用old version of the PHP manual:
current version的措词不同。
关于php - 如何防止PHP中的代码注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1205889/