我有一个网站,在一个页面上它从用户计算机读取cookie并将其用作php代码中的变量,例如在echo statments中。
我目前没有以任何方式清洁烹饪。
2个问题:
有人可以破解他们的cookie将东西放入我的PHP代码中吗?
如果是,我该如何防止这种情况?我该如何清理它?
谢谢!
答案 0 :(得分:6)
是的,在客户端上编辑cookie非常容易。您应该像其他任何用户生成的输入一样处理cookie的值:不信任并验证它。
答案 1 :(得分:3)
是的,可以很容易地利用它,具体取决于它在代码中的使用方式。例如,可以伪造整个请求并为cookie提供任何所需的值。
如何防止这种情况的问题取决于您期望cookie包含的值。您需要做的就是确保cookie的值符合您的规范。不知道这个规范是什么或者如何使用该值,没有更多的话要说。
答案 2 :(得分:3)
如果您只是echoing
Cookie,则用户可以爆炸的漏洞称为“XSS”,代表Cross Site Scripting。基本上他会在网站中插入<script>
标签来执行javascript。
您可以使用php中的函数strip_tags来清除Cookie中的标记。
如果您以其他方式使用cookie,可能会出现新的安全问题,请指明是否属于这种情况。
答案 3 :(得分:1)
Strip_tags不会保护您免遭黑客入侵,也不会剥离XSS。它只剥离HTML,你不需要HTML来XSS一个站点。
答案 4 :(得分:0)
正如人们发布的cookie一样,在客户端操作非常容易。它基本上只是一个文本文件。如果您只回显并且不依赖于cookie中的数据来进行db调用,则函数调用或文件包括您可能不需要关心,因为用户只会影响在本地计算机上显示的内容。在公共计算机上,这可能是一个问题。 如果您希望更多控件使用服务器端会话处理数据。或者,如果您确实需要cookie中的数据,请存储cookue值服务器端的哈希,以便您可以确定它是否已被篡改
答案 5 :(得分:0)
问题不在于输入本身,而是输出方式。如果您echo
直接将其转换为HTML页面,则需要对其进行HTML编码;您在HTML页面中包含的所有字符串都是如此,而不仅仅是Cookie。如果您习惯将非转义字符串输出到HTML中,那么您可能比使用(*)更容易利用XSS错误。
正确处理变量文本以输出到HTML的方法是将htmlspecialchars()
中的每个变量包装到您将其回显到HTML中的点(而不是作为输入处理步骤)。不要使用strip_tags()
- 它不是作为安全措施而设计的,并且在各种情况下都会失败。如果您需要接受有限的用户输入标记,请使用HTML净化器库。
(*:来自cookie的HTML注入的可利用程度在很大程度上取决于cookie的设置方式。如果攻击者有任何方式可以说服您的应用程序将其他用户的cookie设置为特定值,那么它将会容易被利用;否则,为了利用HTML注入,他们必须找到一个cookie修复错误。这可能是你的应用程序中的头部注入错误,或者它可能是“邻居域”中的任何易受攻击的应用程序 - a.example.com
处的应用程序可以设置将由b.example.com
处的应用程序读取的Cookie。)