PHP/JavaScript安全性-JS安全性毫无价值吗


PHP/JavaScript Security - Is JS security worthless?

人!

我正在考虑一个ERP系统的架构,它将是一个单页应用程序。我将向您展示我的思考过程以及我是如何得出这些问题的。

PHP结构与推理

  • 0.MySQL
  • 1.数据库核心
  • 2.ERP模块(此处为用户授权(
  • 3.输入/输出
  • 4.请求

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

模块限制:模块只能与紧接在它之后或之前的模块通话。因此,DBCore只能与MySQLERP通话,ERP只能与DBCoreI/O通话。。。等等

安全推理:所有模块都将有一个输入源和另一个输出源。所以我的想法是,我可以通过每个IO点的一组严格的规则来准确地控制进出。这意味着,在到达ERPDBCore模块上的敏感数据之前,输入将由两个不同的滤波器进行滤波,并将再进行两次滤波(一次在ERP内的Auth模块中,一次在带mysqli::real_escape_string()DBCore模块中(。

所有这些都将在公共WWW文件夹之外。为了与应用程序通信,WWW文件夹中会有一个文件,index.php。如果该页面被张贴,则会启动系统并启动请求。然后,它只是将响应回显给客户端。

1.这种体系结构安全吗

2.这些IO瓶颈是否增加了我的(潜在*(安全性

*潜在的,因为如果过滤器是垃圾,那么安全性就是垃圾。

JavaScript推理

然后我开始思考JavaScript将如何工作。我最初的想法是JS只会处理系统的基本行为(点击、悬停、动画、定位、排序等(。但后来我开始搜索JavaScript安全性,发现一些人说我应该处理用户输入的情况,比如:

var data = '<div class="data">' + someUserInput + '</div>';
$('#someContainer').html(data);

原因是我不应该信任我的用户。我明白了。我不信任用户——这就是为什么我要检查服务器中每个IO点的用户空间数据。但是,如果JS只是在客户端,如果这个家伙正在攻击JS,他唯一要攻击的就是他自己对系统的看法,对吧?因此JS的"安全性"变得毫无用处。

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

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

var foo = $('input#foo-input').val();
$.post('foo.php', {action: foo}, function(r) {
    $('div#foo').html(r);
});

3.PHP会做安全检查,JS安全会失去价值吗

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

这让我想到了我脑海中潜在的问题:

4.JS Security毫无价值吗

我的意思是,这只是妄想症吗?我知道你做安全检查的次数越多越好,但当你想到一个世界时,最优秀、最坚定的黑客正试图入侵你的系统(假设他不会直接利用你的服务器(,缩小、隐藏和保护JS代码变得毫无用处——毕竟,这个人手里有所有的代码需要分析,他只需要耐心。

两者兼而有之。服务器不应该信任客户端,因为人们可以注入javascript并覆盖您的javascript逻辑。事实上,人们甚至可能不会运行你的javascript,只是简单地向你发送坏数据(想想一个shell脚本使用curl或wget访问你的网站(。

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

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