2014-01-21 107 views
0

我正在使用JavaScript将值传递给另一个页面的URL。我应该采取哪些安全措施以便不会以不好的方式操纵?将值传递给URL,安全措施

下面是我在做什么:

window.location = "post.php?value=" + $("input").val(); 

谢谢!

+0

您永远不能相信客户端的URL,_period_。如果这是一个潜在的问题,那么您的设计就会被破坏。 – SLaks

+0

@SLaks如何将一个值传递给另一个不需要验证的页面? – Bagwell

+1

如果值是从客户端发送的,则传递值总是需要验证。有可能您在服务器端的页面之间传递值,这可以在会话中完成。如果放入会话中的值没有以任何方式连接到用户输入,那么可能不需要验证它们,但在这里看起来并不是这样。 – RacerNerd

回答

2

您可以做的唯一的事情是实施一个合适的&完整的服务器端验证,以根除无效值。

,切勿从客户端相信任何总是做服务器端验证

+0

我同意,有点开玩笑......这也是从客户那里获得签署合同的原因。 +1 – RacerNerd

1

这是很难说你想什么,以确保打击,但我建议如果可能的话以下。

任何时候你有一个可以被用户操纵的值,服务器端检查该值。这不仅限于用户输入的值,但任何聪明人都可以在代码中或通过其他方式进行更改。最好的检查方式是将其限制在一个确切的已知值。如果它不完全匹配,请不要使用它。

根据您处理的数据,有问题的字符的松散服务器端筛选器可能是可以接受的,而不是限制为严格的精确值。

1

从发送端,确保值被编码。 URL编码和转义字符,如“&”,“+”,“/”等。这是更正确的比安全。

然后在接收端,确保发送的值没有调和。您应该“清理”投入,以便消除注入风险。另外,您可以使用salted hash或“私钥”来验证该值。我们选择关键字“abc”。

发件人正在发送的值123,但它也将发送一个认证令牌:

?value=abc&auth=XXXX 

其中XXXX作为MD5( 'ABC123')来计算;

接收端也知道这个共享密钥'abc',所以它比较自己的哈希计算与声明的$ auth值。

如果该值被调和,哈希将被不同地计算,并且接收方可以拒绝这样的请求。这种技术在跨服务器/ RPC服务中很常见。

希望这会有所帮助。