我正在一个关于信息安全的学校项目中,其中一项任务是用PHP编写一些安全页面.我小组中没有人知道PHP,但这不是一个大问题,我们将学到足够的知识来创建所需的简单页面.
学生助理给出的一个提示是使用这两个功能strip_tags()
和mysqli_real_escape_string()
.我认为这些是安全的,但没有深入的了解我不确定.一些简单的谷歌搜索显示,至少过去存在漏洞.作为任务的一部分,试图打破其他群体系统,重要的是我们自己的系统是安全的,并在其他群体的系统中找到可能的漏洞.而且大多数团体都会盲目地使用这两个功能.所以我的问题是:
是否有任何已知的漏洞strip_tags()
?
是否有任何已知的漏洞mysqli_real_escape_string()
?
是否有一个自然的地方来搜索这些漏洞(除了询问StackOverflow)?
Noah Goodric.. 8
首先,我建议您使用Mysqli Prepared Statements.这些比escape函数更安全,因为它完全将查询结构与查询参数分开.
你可以使用任何用strip_tags或ヶ辆,以确保没有恶意代码被输出到浏览器.在将其输出到浏览器之前,您可能还希望通过某种过滤器功能运行所有动态内容.这是一个组织良好且具有凝聚力的OO方法可以提供帮助的一个领域,因为您可以将所有动态内容分配给单个对象,然后负责将输出呈现给浏览器,以便您可以始终感到安全,因为您知道您的内容是XSS安全,无需跨多个页面搜索数百个echo语句.
然而,这两个建议实际上只涉及到PHP安全性的冰山一角.还有许多其他问题需要处理,例如:
安全会话管理
会话固定
我建议您查看以下站点,以获得有关PHP安全性主题的其他更全面的处理:
shiflett.org
phpsecurity.org(这是另一个Chris Shiflett网站,但我不确定他是否有其他内容不在他的个人网站上)
phpsec.org没有我想要的那么多内容,但有一些有用的东西要知道,例如使某些包含敏感信息的配置文件(如数据库密码)不存储在公共可用的目录中.
在最后一项上,如果可能,您将需要查看使用.htaccess文件或其等效的IIS,以确保只有您想要访问的文件是公开可用的.否则,您的所有其他安全措施都将是徒劳的.
更新:我想到了与项目安全性相关的其他几个问题.如果你还记得Twitter管理员的账号在不久前遭到黑客攻击的不幸事件,那么就可以通过几个原因轻松解决这个问题.
1)密码登录尝试未受限制的地方.换句话说,如果用户尝试登录并失败,那么来自其IP的重复请求可能需要2秒来处理第二次,然后4则是下一次,依此类推.这使得机器人进行连续登录尝试是不切实际的.
2)不需要安全密码.由于密码具有更高的要求(字母数字和特殊字符所需的字符长度和类型),因此字典攻击变得完全不切实际,因为在破解密码时抛出字典要比提出随机数字字符串容易得多和信件.此外,随着添加更多字符,密码破解的时间也呈指数级增长.
你可以看到这个帖子从杰夫·阿特伍德对这一特定主题的更多信息.
首先,我建议您使用Mysqli Prepared Statements.这些比escape函数更安全,因为它完全将查询结构与查询参数分开.
你可以使用任何用strip_tags或ヶ辆,以确保没有恶意代码被输出到浏览器.在将其输出到浏览器之前,您可能还希望通过某种过滤器功能运行所有动态内容.这是一个组织良好且具有凝聚力的OO方法可以提供帮助的一个领域,因为您可以将所有动态内容分配给单个对象,然后负责将输出呈现给浏览器,以便您可以始终感到安全,因为您知道您的内容是XSS安全,无需跨多个页面搜索数百个echo语句.
然而,这两个建议实际上只涉及到PHP安全性的冰山一角.还有许多其他问题需要处理,例如:
安全会话管理
会话固定
我建议您查看以下站点,以获得有关PHP安全性主题的其他更全面的处理:
shiflett.org
phpsecurity.org(这是另一个Chris Shiflett网站,但我不确定他是否有其他内容不在他的个人网站上)
phpsec.org没有我想要的那么多内容,但有一些有用的东西要知道,例如使某些包含敏感信息的配置文件(如数据库密码)不存储在公共可用的目录中.
在最后一项上,如果可能,您将需要查看使用.htaccess文件或其等效的IIS,以确保只有您想要访问的文件是公开可用的.否则,您的所有其他安全措施都将是徒劳的.
更新:我想到了与项目安全性相关的其他几个问题.如果你还记得Twitter管理员的账号在不久前遭到黑客攻击的不幸事件,那么就可以通过几个原因轻松解决这个问题.
1)密码登录尝试未受限制的地方.换句话说,如果用户尝试登录并失败,那么来自其IP的重复请求可能需要2秒来处理第二次,然后4则是下一次,依此类推.这使得机器人进行连续登录尝试是不切实际的.
2)不需要安全密码.由于密码具有更高的要求(字母数字和特殊字符所需的字符长度和类型),因此字典攻击变得完全不切实际,因为在破解密码时抛出字典要比提出随机数字字符串容易得多和信件.此外,随着添加更多字符,密码破解的时间也呈指数级增长.
你可以看到这个帖子从杰夫·阿特伍德对这一特定主题的更多信息.