Php strip_tags()和mysqli_real_escape_string()的安全性

Php strip_tags()和mysqli_real_escape_string()的安全性,php,security,Php,Security,我参加了一个关于信息安全的学校项目,其中一个任务是用PHP编写一些安全页面。我的团队中没有人知道PHP,这不是一个大问题,我们将学到足够的知识来创建所需的简单页面 学生助手给出的提示之一是使用两个函数strip\u tags()和mysqli\u real\u escape\u string()。我认为这些都是安全的,但没有深入的了解,我觉得不确定。一些简单的谷歌搜索显示,至少过去存在漏洞。由于任务的一部分是试图破坏其他组的系统,因此我们自己的系统是安全的,并且在其他组的系统中找到可能的漏洞,这

我参加了一个关于信息安全的学校项目,其中一个任务是用PHP编写一些安全页面。我的团队中没有人知道PHP,这不是一个大问题,我们将学到足够的知识来创建所需的简单页面

学生助手给出的提示之一是使用两个函数
strip\u tags()
mysqli\u real\u escape\u string()
。我认为这些都是安全的,但没有深入的了解,我觉得不确定。一些简单的谷歌搜索显示,至少过去存在漏洞。由于任务的一部分是试图破坏其他组的系统,因此我们自己的系统是安全的,并且在其他组的系统中找到可能的漏洞,这一点很重要。大多数群体会盲目地使用这两种功能。因此,我的问题是:

  • strip_tags()
    中是否存在任何已知漏洞
  • mysqli\u real\u escape\u string()
    中是否存在已知漏洞
  • 是否有一个搜索此类漏洞的自然场所(除了询问StackOverflow)

  • 对于PHP错误:

    漏洞是特定于版本的,您应该指定应该使用的PHP版本。如果您使用的是旧版本,则旧(已修复)漏洞很容易在或中找到。首先,我建议您使用。这些函数比转义函数更重要,因为它将查询结构与查询参数完全分离

    您可以使用strip_标记或htmlentities来确保没有恶意代码输出到浏览器。在将动态内容输出到浏览器之前,您可能还希望通过某种过滤函数运行动态内容。这是一个组织良好且内聚的OO方法可以提供帮助的领域,因为您可以将所有动态内容分配给一个对象,然后该对象负责将输出呈现给浏览器,这样您就可以始终感到安全,因为您知道您的内容是XSS安全的,而无需在多个浏览器中搜索数百条echo语句页数

    然而,这两个建议在涉及PHP安全性时只触及了冰山一角。还必须处理一些其他问题,例如:

    我建议您查看以下网站,以获取有关PHP安全性主题的更多、更全面的信息:

    • (这是另一个Chris Shiflett网站,但我不确定他是否有其他不在个人网站上的内容)
    • 没有我想要的那么多内容,但是有一些有用的东西需要知道,例如,使某些包含敏感信息(如数据库密码)的配置文件不存储在公开可用的目录中
    在最后一项中,如果可能的话,您将希望研究使用.htaccess文件或其等效的IIS,以确保只有您想要访问的文件是公开的。否则,所有其他安全措施都将无效

    更新:我想到了与您的项目中的安全性相关的几个其他问题。如果你还记得不久前一个Twitter管理员帐户被黑客攻击的不幸事件,那么它之所以被允许发生,有几个原因都可以很容易解决

    1) 密码登录尝试未被阻止。换句话说,如果用户尝试登录但失败,则来自其IP的重复请求可能需要2秒来处理第二次,然后是4秒,以此类推。这使得机器人不可能连续尝试登录。
    2) 不需要安全密码。由于密码有更高的要求(所需字符的长度和类型,如字母数字和特殊字符),因此字典攻击变得完全不切实际,因为在破解密码时使用字典要比使用随机数字和字母字符串容易得多。此外,密码破解的时间随着添加的字符数的增加而呈指数增长

    有关此特定主题的更多信息,请参见Jeff Atwood。

    参见