在问这个问题之前,我承认这种方法非常不鼓励并且不安全。我知道要实现这一点是通过 SSL。
但是,我正在开发一个 HTML5 应用程序(似乎实现 SSL 方法需要很多时间),我想知道发布表单内容的最佳方式。
即我有以下表格
<form id="someform" name="someform" method="POST" action="some/server/url">
提交此表单的方式(当前)是使用 ajax $("#someform).serialize() 等等..
使用这个实现我面临(至少)这两个直接的问题:
- 用户可以使用工具(即 TamperData | 一个 firefox 插件)来修改发布的内容(拦截和修改)。
- 用户可以通过发送“假”提交来伪造数据(伪造)
我想知道是否有某种方式我至少可以(混淆 POST-ed)值。
我遇到了这个很棒的http://www.jcryption.org/工具,但不确定我应该如何实施它来解决我面临的问题。
ps:我再次意识到,与从服务器端处理所有执行相比,依赖客户端脚本的安全性要低得多。
我使用的框架+语言是:CodeIgniter + PHP + JavaScript (jquery)
第 1 条修正案:
我相信至少有一个解决方法使用这个理论
首先,我不太担心我的数据的机密性部分,即 POST-ed 值不会提供任何有价值的信息,即使其他人知道它是什么。
不过,我担心的是 POST-ed 值的完整性和真实性。这只是意味着一旦信息被传输(一旦单击提交按钮),任何人都不应篡改信息,任何人都不能伪造或创建虚假值(欺骗服务器)。
这个理论导致数字签名,其中(再次在理论上)我应该以某种方式使用服务器 PUB 密钥对 POST ed 值进行签名,然后使用服务器 PUB 密钥对 POST ed 值进行散列,最后发送原始 POST ed值以及散列值。
在发送 POST-ed 值之前,客户端必须请求服务器 PUB-key,以便客户端可以散列 POST-ed 值。服务器可能会将 PUB 密钥信息与 SESSION 信息一起存储。
然后服务器必须(再次)散列(这次使用服务器 PRI-key)原始 POST 值(由客户端发送)并比较两个散列值。如果这些值相同,则仅表示它是真实的。
现在我还没有理解的部分是如何......
有没有关于如何做到这一点的工具/框架/插件/教程/示例?因为从头开始开发整个公钥基础设施对我来说太多了(更不用说我的时间有限了)