使用JavaScript / PHP安全地提交表单

Securely submit form using JavaScript / PHP

本文关键字:提交 表单 安全 PHP JavaScript 使用      更新时间:2023-09-26

在问这个问题之前,我承认这种方法是非常不鼓励的,而且不安全。我知道这是通过SSL实现的。

然而,我正在开发一个HTML5应用程序(似乎实现SSL方法会花费很多时间),我想知道发布表单内容的最佳方式。

。e我有下面的表单

<form id="someform" name="someform" method="POST" action="some/server/url">

这个表单提交的方式(目前)是使用ajax $("#someform ").serialize()等…

使用这个实现,我面临(至少)这两个直接的问题:

  1. 用户可以使用工具(即TamperData | firefox插件)修改发布的内容(拦截和修改)。
  2. 用户可以通过发送"伪造"提交(锻造)来伪造数据

我想知道是否有某种方式我至少可以(混淆POST-ed)值。

我遇到了这个伟大的http://www.jcryption.org/工具,但不确定我应该如何实现它来解决我所面临的问题。

ps:我再次意识到,与在服务器端处理所有执行相比,依赖客户端脚本是不太安全的。

框架+语言我使用的是:CodeIgniter + PHP + JavaScript (jquery)

第一修正案:

我相信至少有一种方法可以使用这个理论

首先,我不太担心我的数据的机密性部分,即POST-ed值不会提供任何有价值的信息,即使别人知道它是什么。

我关心的是POST-ed值的完整性和真实性。这只是意味着,一旦信息被传输(一旦提交按钮被点击),任何人都不应该篡改信息,也没有人可以伪造或创建假值(欺骗服务器)。

这个理论导致了数字签名,其中(再次在理论上)我应该以某种方式使用服务器PUB-key对POST-ed值进行签名,然后使用服务器PUB-key对POST-ed值进行散列,最后发送原始POST-ed值和散列值。

在发送POST-ed值之前,客户端必须请求服务器的PUB-key,以便客户端可以散列POST-ed值。服务器可能会将PUB-key信息与SESSION信息一起存储。

然后服务器将不得不(再次)散列(这次使用服务器的PRI-key)原始POST-ed值(由客户端发送)并比较两个散列值。如果这些值是相同的,这仅仅意味着它是真实的。

现在我还不明白的部分是如何.....

有什么工具/框架/插件/教程/例子如何做到这一点?因为从头开始开发整个公钥基础设施对我来说太多了(更不用说我有限的时间了)

更进一步,用户也可以加密伪造的数据。
而SSL无法防止这种篡改。

这是一个web开发公理:一切都可以在客户端伪造。时期。

所以,不用加密任何东西,只需在服务器端验证你的输入,就像其他网站一样。

使用sessions存储用户不应该访问的数据。

用户

欺骗表单提交

你可以在这里获得完整的信息