我有一个脚本(由我编写的),在这个脚本中,访问者可以注册和登录(用户信息存储在cookie中)…注册后,他们可以编辑他们的个人页面。问题是:这个页面接受javascript代码,任何人都可以使用文档获取cookie。饼干:(
我尝试创建正则表达式来清理文档。cookie标签从用户页面,但这不是很好的解决方案,因为用户可以把:<script src="filejs.js"></script>
和写在filejs.js中,例如这段代码alert(document.cookie);
,这段代码不会发现清理....
会话保存,但不保存很长时间(time()+60*24*300
):(
谢谢。
为什么要阻止用户看到他们自己的cookie?他们已经可以了,cookies就存储在他们的电脑里。
如果你想防止别人把脚本放入你的页面,使用strip_tags
从输入中删除HTML,或者使用htmlspecialchars
将其显示为纯文本。
让用户在你的页面中包含JavaScript是很难保证安全的。您将无法单独使用正则表达式实现这一点。你需要使用一个重量级的解决方案,比如谷歌的Caja项目。
撇开其他安全问题不谈,你可以通过使用HttpOnly标志来保护你的cookie不受JavaScript的攻击。您可以在PHP中通过将$httponly
参数的真值传递给setcookie()
来使用它。
防止javascript访问cookie的最好方法是在cookie上设置HttpOnly标志。在PHP中,可以使用session将此应用于会话cookie。Cookie-httponly ini指令。如果使用setcookie()设置cookie,可以将可选的$httponly
参数设置为TRUE
。
你不能阻止用户看到他们自己的cookie -即使你删除了所有的HTML等。
他们所需要的只是带有实时http标头的Firefox。正如另一张海报所提到的——既然给了他们饼干,为什么还要把饼干从他们身上撕下来呢?
注册后,他们可以编辑他们的个人页面。问题:这个页面接受javascript代码…
所以修复它(例如,通过使用HTML杀毒器,或者通过使用非HTML的标记语言)。你所描述的并不是一个特性——而是一个严重的安全漏洞——并且它不能通过调整你的会话来有效地掩盖。这相当于重新安排泰坦尼克号甲板上的椅子。