我如何使jQuery(javascript)ajax表单数据发送较少人类可读?

时间:2015-01-28 12:04:03

标签: javascript php jquery ajax

使用firebug或chrome控制台的人可以拦截提交的表单数据,然后切换一些值,例如。 发件人的身份证。我想知道我是否可以使数据发送的可读性更低,因此攻击者不会想要处理它。

我看到这样的事情:

$.ajax({
    type: "POST",
    url: 'http://www.example.com/widget_category.php',
    data: "p=eyJUcmF6ZW5pUG9qYW0iOiIiLCJJREdydXBhIjoiMzA3IiwiSURQb2RHcnVwYSI6MzA3LCJQcm9kYXZhYyI6IiIsIk9rcnV6aSI6W10sIk9wc3RpbmUiOltdLCJDZW5hT2QiOi0xLCJDZW5hRG8iOi0xLCJTdGFuamFQcmVkbWV0YSI6W10sIk5hY2luaVBsYWNhbmphIjpbXSwiRmlsdGVyIjpbXX0=",
    dataType:'html',
    success: function(res){
        $('#limwidget').empty().append(res);
    }
    }); 

编辑: 我看到这个问题被接受了。我只是想指出我正在验证服务器端收到的所有数据,并且应该没有问题,但我只想隐藏数据库中的真实敏感数据(也许还要让它们以某种方式签名时间戳,不同于用户)。 我意识到在服务器端(php)可能会考虑这个问题,所有敏感数据应该在服务器端而不是客户端进行交换,因此我们可以通过默默无闻来避免安全性。

感谢您澄清

还有一个编辑: 我现在看到来自给定示例的atob函数的输出

eyJUcmF6ZW5pUG9qYW0iOiIiLCJJREdydXBhIjoiMzA3IiwiSURQb2RHcnVwYSI6MzA3LCJQcm9kYXZhYyI6IiIsIk9rcnV6aSI6W10sIk9wc3RpbmUiOltdLCJDZW5hT2QiOi0xLCJDZW5hRG8iOi0xLCJTdGFuamFQcmVkbWV0YSI6W10sIk5hY2luaVBsYWNhbmphIjpbXSwiRmlsdGVyIjpbXX0=

{"TrazeniPojam":"","IDGrupa":"307","IDPodGrupa":307,"Prodavac":"","Okruzi":[],"Opstine":[],"CenaOd":-1,"CenaDo":-1,"StanjaPredmeta":[],"NaciniPlacanja":[],"Filter":[]}

所以我猜在客户端开始隐藏数据是没用的。

5 个答案:

答案 0 :(得分:1)

您可以使用atob()和btoa()将数据编码为base64,然后在服务器中对其进行解码。请注意,这样做只会模糊您的代码,并且不会使其100%安全。

以下是有关JavaScript的Base64编码的一些信息。

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding

答案 1 :(得分:1)

即使进行此更改,他们也可以更改前端的任何内容。可以读取发送到客户端的所有内容,包括您使用的任何加密代码。它可能更难,但你混淆了安全性的混淆

混淆不会解决问题。

您应优先考虑使用服务器端代码来验证和清理来自前端的数据。

http://en.wikipedia.org/wiki/Security_through_obscurity

答案 2 :(得分:1)

你应该忘记在客户端使用敏感逻辑并期望安全,没有办法做到这一点。

即使你是" ofuscate"输出,恶意用户可以在模仿之前设置断点并随意更改值。

如果您担心有人可以更改SenderID,那么假设对您的方案有效,您可以在服务器端验证发布的SenderID与发起的请求相同。

答案 3 :(得分:0)

Base64,内容会有点长,但受到广泛支持,还有命令行工具来解码它。

答案 4 :(得分:0)

我认为最安全的做法是假设来自客户端的所有数据都是邪恶的,并在您的服务器上添加代码以在适当的时候进行验证和授权。您可以对数据进行编码,然后在服务器上对其进行解码,但JavaScript编码/加密没有您想要的那么有用。攻击者可以随时在浏览器中打开开发控制台,检查您的代码,并运行您对其新恶意数据使用的加密方法。