JSON和Javascript的安全性让我感到非常困惑(并且担忧)

4

我已经试图研究这个主题一段时间了,甚至引用了以下 Stack Overflow 主题:

Javascript 劫持 - 什么时候以及应该担心多少

JSON 安全最佳实践

但我的基本问题是这样的。

当我构建我的 Web 应用程序时,我使用像 Fiddler、Chrome 开发者工具、Firebug 等工具。我即时更改内容来测试功能。我甚至似乎可以使用 Fiddler 更改发送到服务器的数据。

那么,有什么阻止别人打开我的网页并做同样的事情呢?如果用户可以轻松地按下 F12 打开 Chrome 开发者工具并更改发送的数据,那么所有 jQuery 验证都将毫无用处,对吗?

我在这个领域还相对较新,这让我非常担忧,因为“开放”协议变得越来越普遍。我还不理解 SSL(这是我要开始研究的事情之一),所以也许这就是答案,只是我还没有深入挖掘。但是,我对于自己操纵页面的灵活性感到非常担心 - 这让我非常担心恶意用户可能会做什么。


2
你甚至不需要劫持页面,我可以在Linux上打开命令行并向你的服务器提交任何内容。服务器端需要进行验证。 - epascarello
6个回答

9

您的担忧确实是有道理的。这就是为什么您应该始终在服务器上验证所有内容。客户端验证只应用于用户体验。


1
JavaScript的安全性,简而言之,是基于一个可信任的服务器。如果您始终信任服务器发送给您的代码,那么它应该是安全的。第三方(例如广告供应商)无法从所包含的域获取数据。
如果服务器还向您发送用户生成的内容,特别是用户生成的代码,则可能存在安全问题。这就是XSS攻击所关注的内容(在受信任的环境中运行恶意脚本)。
客户端验证应该侧重于易用性,使其易于更正错误或指导用户以避免出错。服务器应始终进行验证,但验证应更加严格。

1

验证应该始终在服务器端进行,客户端验证只有让用户体验更加方便才有价值。您永远不能相信用户不会在其端操纵数据。(Javascript是客户端)

接下来,如果您想要保护您的服务,以便只有用户1可以编辑用户1的个人资料,则需要使用OAuth(或类似协议)对JSON请求进行签名。


0

是的,任何人都可以干扰从浏览器发送到服务器的数据,这就是你不应该信任它的原因。
始终检查用户数据的真实性和有效性。

此外,您还可以检查和干扰像谷歌和微软这样的大型网站发送回来的数据,这可能会给您一些想法。


0
你必须假设客户端是恶意的——使用 SSL 并不能完全防止这种情况。所有数据验证和授权检查都需要在服务器端完成。

0
JavaScript 不应该是你对抗黑客的唯一防线,事实上它根本不应该用于安全。客户端代码可以用于验证表单输入,以便试图使用页面的用户可以获得更快的响应时间,并且页面运行良好。任何试图攻击你的页面的人都不会在乎你的页面是否工作。无论如何,进入你的服务器的所有内容都应该经过验证,永远不要假定为安全。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接