除了XSS和Sql注入,我可以保护我的网站的方法吗?

时间:2010-06-02 15:57:52

标签: php mysql security xss sql-injection


因此,我的网站成员可以发布主题,回复,评论,编辑等等。我总是使用htmlspecialcharsaddslashes来获取html输入,以保护我的网站免受XSS和SQL注入攻击。是否足够或者是否有更多我想念的东西? 感谢。

6 个答案:

答案 0 :(得分:8)

Web应用程序可能出现很多问题。除了XSS和SQLi之外,还有:

  1. CSRF - 跨站请求伪造
  2. LFI / RFI - 由include()require() ...
  3. 引起的本地文件包含/远程文件包含
  4. mail()
  5. 中的CRLF注入
  6. 全局变量命名空间Poising通常由register_globalsextract()import_request_variables()
  7. 引起
  8. 目录遍历:fopen()file_get_contents()file_put_conents()
  9. 使用eval()preg_replace() /e
  10. 执行远程执行代码
  11. 使用passthru()exec()system()和``
  12. 执行远程执行代码

    Broken Authentication and Session Management存在一整套漏洞,它是每个网络应用程序程序员必须读取的OWASP Top 10的一部分。

    A Study In Scarlet是一篇很好的黑皮书,它涵盖了我列出的许多漏洞。

    但是,Wordpress中也存在类似这样的奇怪漏洞。什么是漏洞的最终权威是CWE system,它对 HUNDREDS 漏洞进行了分类,其中许多漏洞可能会影响Web应用程序。

答案 1 :(得分:6)

您应该使用预准备语句(请参阅PDO)来阻止SQL注入。输出内容时,htmlspecialchars()似乎足以阻止XSS。

另请查看这些链接,了解更多保护网站的方法:

http://phpsec.org/projects/guide/

http://cwe.mitre.org/top25/#Listing

http://www.owasp.org/index.php/Top_10_2010-Main

答案 2 :(得分:2)

防止SQL注入的更好方法是使用专门为每个数据库编写的escape函数 - 例如,PostGreSQL使用pg_escape_string在将字符串字段插入数据库之前转义字符串字段。或者在您的情况下,使用mysql_real_escape_string

答案 3 :(得分:2)

您应该将mysql_real_escape_string()用于SQL,而不是使用addslashes。 (假设您使用的是MySQL)

答案 4 :(得分:0)

将数据插入数据库时​​,请使用预准备语句。 PDO优于mysql_real_espace_string。

显示评论,帖子等数据时,请使用htmlentities。

答案 5 :(得分:0)

SQL注入:

  1. 没有addslashes或mysql_real_escape_string可以单独帮助。但只有在按照某些规则使用时。即便如此,这还不够。所以,这就是为新手准备好的陈述更好的原因 - 它不需要思考。

  2. 转义和准备好的语句都可以帮助仅提供数据。对于运营商/标识符,存在不同的规则。 (虽然不是什么大问题 - 每个可能的组合必须在脚本中硬编码)

  3. XSS:

    不允许用户使用HTML 为防止这种情况,可以使用strip_tags()(没有允许的标签)或htmlspecialchars() 如果您想允许某些标记,请考虑使用BB代码。

    CSRF:

    任何重要表单都必须包含唯一标记,该标记应与保存在会话中的标记进行比较。