我有点困惑,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()何时使用?htmlspecialcharshtmlentities大致相同。区别:字符编码。
    两者都编码用于打开标签等的诸如<>&等控制字符。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/

    10-12 05:34