2011-07-26 33 views

回答

5

POST数组完全由客户端传输的数据填充,其中的所有内容都应该是可疑的。因此,不要从回发请求中提取数字并设置某人的帐户余额。

此外,“POST”只是一种HTTP请求,意味着它以纯文本形式发送。不要让客户端通过POST向您发送登录密码,除非您使用SSL封装HTTP流(使用https://并正确配置Web服务器),因为您不控制客户端和服务器之间的网络。主要网站通常不会这样做(出于性能方面的原因),但所有网上银行至少已经这么做了10年。

+0

如果需要虽然我不能使用某种PHP加密功能?如md5? –

+0

@Howdy你说的是可能的,但几乎肯定不会像你想象的那样。查看我刚刚添加的其他答案(此评论框中没有足够的字符)。 –

1

想那POST数据从与以纯文本HTTP请求的浏览器sended。

能够嗅探您的网络或执行Midle黑客入侵的人可以查看此信息。

使用像Tamper Data这样的Firefox扩展,用户可以在将POST数据发送到服务器之前更改POST数据。

永远不要推送POST数据,始终在服务器端进行验证。

0

从我对你刚才提问的评论:

黑客可以看到使用容易获得的软件工具,通过你的表单提交的字段和值,然后重新发布到他/她的愿望。

0

关于MD5:

md5不是一种加密算法,它是一种哈希算法。它会将任何字符串转换为16字节的散列。从理论上讲:

  1. 如果你有两个对象,a和b,和MD5(一)== MD5(B),然后== b

  2. 如果你有MD5(a)您无法弄清楚一个。

这些与哈希工作时都隐含假设,但他们却从未真正 - 头号显然是不正确的,因为如果你哈希2^16个+ 1个不同的字符串,然后由鸽巢原理,必须有两个具有相同散列的不同字符串。第二个显然不是真实的,因为攻击者可以搜索散列的md5值范围,但对于现代密码安全散列(而不是md5),这是不可行的。

回到你的问题,你可以问客户端的用户密码的MD5散列(你需要客户端JavaScript来计算),但这是一个可怕的想法。如果您对用户的期望是密码的md5,那么这就是攻击者需要知道的全部内容,并且您将以纯文本格式发送它。你可以做的是发送给客户一个随机数。这就像一个挑战。为了让客户证明她知道她的密码,她可以给你发送一个随机数和她的密码连接的散列。这个想法是任何攻击者都不能回答挑战,因为他只知道随机数,并且在发送随机数密码散列之后,对他来说已经太迟了,因为你已经收到了它,并且不期待对该随机数的回答再次。属性2确保他不能从哈希中提取密码。

这很容易被攻击者窃取挑战响应并在客户端做到之前将其提供给您。您可以通过多轮通信组成一个完整的密码系统来获得很多乐趣(反直觉上它实际上可能来回发送哈希并安全地进行身份验证),但是很快您只需实现其他人已经为您完成的HTTPS :)

+0

哈哈哈,听起来我还有很多东西要学。我将不得不考虑随机数并玩弄它。伟大的回应! –