ham*_*son 6 javascript php security ajax drupal
我正在构建一个Drupal网站,其中包含许多用户特定的信息,这些信息将使用jQuery/ajax发布.它本身的信息不是很敏感,重要的是验证表单数据没有被Firebug等工具篡改,以及确保指定用户真正请求信息.换句话说,我试图找出使用ajax发布时保护数据完整性和真实性的最佳方法.
理想情况下,我想使用一些众所周知的消息认证系统,如HMAC算法.但由于这包含了一个对称密钥,我不知道如何在不暴露我的javascript文件中的密钥的情况下加密POST数据(显然任何人都可以看到).
如果我对如何运作有错误的想法,请纠正我.
例如,我需要发送的信息
field1=x&field2=y&uid=10
Run Code Online (Sandbox Code Playgroud)
...然后计算数据的哈希值和密钥.这可能不在我的javascript代码中暴露哈希函数吗?
CHECKSUM: hash(postdata, "secret_key")
Run Code Online (Sandbox Code Playgroud)
...最后将校验和附加到原始postdata.
field1=x&field2=y&uid=1&c=CHECKSUM
Run Code Online (Sandbox Code Playgroud)
我可以选择使用登录用户的会话ID.然而,这不会检查消息的完整性......
使用PHP生成表单时,我可以使用以下内容生成隐藏的输入
CHECKSUM: hash(session id for the current user, "secretkey")
Run Code Online (Sandbox Code Playgroud)
然后我将使用ajax发布的是
field1=x&field2=y&uid=10&c=CHECKSUM
Run Code Online (Sandbox Code Playgroud)
有了它,验证适当的用户(再次伪代码)是相当安全的
ssid = SELECT ssid FROM sessions WHERE uid = $_POST[uid]
if(ssid && hash(ssid, "secretkey") == $_POST[c]) {
//User OK
} else {
//Invalid user
}
Run Code Online (Sandbox Code Playgroud)
小智 7
你无法做你想做的事.基本上,您正在尝试验证不受信任和不受控制的客户端上的一个组件(您的表单)是否未被同一客户端上的另一个组件篡改.您无法控制客户端.您可以提出各种方法,使某些人更难在客户端上执行此操作,但最终您必须公开如何对客户端执行这些完整性检查.无论你在表单脚本中做什么,都可以被客户端上的人阅读和理解(它必须在客户端上运行,因此与客户端交互的任何人都可以对你正在做的任何事情进行反向工程以恢复使用的技术和任何键/ etc,你必须启用你的方案).
Web应用程序安全性的基本规则是您无法控制客户端上发生的情况,因此您无法信任此类客户端验证/安全方案.
最后,这种计划提供的保护不太可能值得花时间和投资来实施.决心打破它的人将能够.
归档时间: |
|
查看次数: |
5312 次 |
最近记录: |