PHP / JavaScript安全性 - JS安全性是否毫无价值?

时间:2015-09-03 19:49:02

标签: javascript php security

人!

我正在思考ERP System的架构,它将是Single-Page App。我会告诉你我的思考过程以及我是如何得出问题的。

PHP结构和推理

  • 0。 MySQL
  • 1。数据库核心
  • 2。 ERP模块(用户身份验证在这里)
  • 3。 I / O
  • 4。请求

工作原理: DBCore将提供查询数据库的API,ERP将是我们需要的所有商务模块,I/O会照顾将ERP响应转换为HTML格式和Request将是服务器和客户端之间的门,将POST阵列转换为I/O数组。

模块限制:模块只能在它之后或之前与模块通信。因此,DBCore只会与MySQLERP进行对话,ERP只能与DBCoreI/O进行对话...等等。

安全推理:所有模块都有一个输入和一个输出源。所以我的想法是,我可以通过每个IO点上的一套严格的规则来准确控制进出的内容。这意味着在到达ERPDBCore模块上的敏感数据之前,输入将被2个不同的过滤器过滤,并且可以进行两次过滤(一次在Auth内的ERP模块和DBCore mysqli::real_escape_string()模块中的var data = '<div class="data">' + someUserInput + '</div>'; $('#someContainer').html(data); 模块。

所有这些都将在Public WWW文件夹之外。要与应用程序通信,WWW文件夹中将有一个文件 index.php 。此页面将启动系统并在POST被发送时启动请求。然后它只是将响应回传给客户端。

1。这种架构安全吗?

2。这些IO瓶颈会增加我的(潜在*)安全性吗?

*可能因为如果过滤器是废话,那么安全性将是废话。

JavaScript推理

然后我开始考虑JavaScript如何工作。我的第一个想法是JS只会处理系统的基本行为(点击,悬停,动画,定位,排序等......)。但后来我开始搜索JavaScript安全性并发现有些人说我应该对以下案例的用户输入进行处理:

var foo = $('input#foo-input').val();

$.post('foo.php', {action: foo}, function(r) {
    $('div#foo').html(r);
});

原因是我不相信我的用户。我明白了。我不信任用户 - 这就是为什么我要检查服务器中每个IO点的用户空间数据。但是,如果JS只是在客户端,而且如果这个人正在攻击JS,他唯一会破解的是他自己对系统的看法,对吧?所以JS&#34;安全&#34;变得无用。

这样说:如果我的PHP代码非常好,没有数据会过滤,并且这些过滤器是100%安全的,JS安全性会失去它的价值,对吧? / p>

换句话说,我可以(安全地):

{{1}}

3。由于PHP会进行安全检查,JS安全性是否会失去其价值?

此外,如果我所有的PHP代码都是废话并且我确实拥有所有最佳 JS安全性,那么只需查看代码就可以绕过它,对吧?我的意思是,我们现在在浏览器上拥有所有这些很酷的JS控制台,可以做各种各样的事情。他可以使用一个简单的$ .post()打开一个JS控制台并发布他想要的东西,对吗?然后我们回到PHP需要过滤用户空间数据的第一步......

这让我想到了脑子里的潜在问题:

4。 JS Security是否毫无价值?

我的意思是,这只是偏执吗?我知道你做的安全检查得分越多越好,但当你想到一个最好最有决心的黑客试图破解你的系统的世界时(假设他不打算直接利用你的服务器),缩小隐藏和保护JS代码变得毫无用处 - 毕竟,这个人手中的所有代码都要分析,他只需要耐心。

1 个答案:

答案 0 :(得分:4)

两者都是。服务器不应该信任客户端,因为人们可以注入javascript并覆盖你的javascript逻辑。实际上,人们可能甚至不会运行您的javascript并只是向您发送错误数据(想想使用curl或wget访问您网站的shell脚本)。

同时,您的javascript不应该信任来自服务器的数据,因为人们可能会进行MITM攻击并将内容注入您的页面。 MITM不需要是您网络上的黑客。它也可能是一个糟糕/恶意的浏览器插件。即使没有MITM攻击者,它也应该保护自己免受自己在服务器代码中的错误的影响。大多数安全漏洞都是错误。

所以你需要两者。 PHP代码应该清理您的数据。 javascript代码不应该只是来自服务器的.innerHTMLeval()内容而不进行检查。