【发布时间】:2015-09-03 19:49:01
【问题描述】:
人!
我正在考虑ERP System 的架构,这将是Single-Page App。我将向您展示我的思考过程以及我是如何得出这些问题的。
PHP 结构与推理
- 0。 MySQL
- 1。数据库核心
- 2。 ERP 模块(用户验证在这里)
- 3。输入输出
- 4。请求
工作原理: DBCore 将提供查询数据库的 API,ERP 将是我们需要的所有业务模块,I/O 将负责翻译 ERP 响应转换为 HTML 格式,Request 将成为服务器和客户端之间的大门,将 POST 数组转换为 I/O 数组。
模块限制:模块只能在模块之后或之前与模块对话。所以,DBCore 只会与MySQL 或ERP 交谈,ERP 只能与DBCore 和I/O 交谈……等等。
安全推理:所有模块都将有一个输入和一个输出源。所以我的想法是,我可以通过每个 IO 点的一套严格的规则来准确控制进出的内容。这意味着在到达 ERP 或 DBCore 模块上的敏感数据之前,输入将被 2 个不同的过滤器过滤,并且可以再过滤两次(一个在 ERP 内的 Auth 模块中)和DBCore 模块中的一个mysqli::real_escape_string())。
所有这些都将位于公共 WWW 文件夹之外。为了与应用程序通信,在 WWW 文件夹中会有一个文件 index.php。此页面将引导系统并在它被 POST 时启动一个请求。然后它只是将响应回显给客户端。
1。这种架构安全吗?
2。这些 IO 瓶颈是否会提高我的(潜在*)安全性?
*有可能,因为如果过滤器很糟糕,那么安全性也会很糟糕。
JavaScript 推理
然后我开始思考 JavaScript 将如何工作。我的第一个想法是 JS 只会处理系统的基本行为(点击、悬停、动画、定位、排序等)。但后来我开始搜索 JavaScript 安全性,发现有人说我应该在以下情况下处理用户输入:
var data = '<div class="data">' + someUserInput + '</div>';
$('#someContainer').html(data);
原因是我不应该信任我的用户。我明白了。我不信任用户——这就是为什么我会在服务器的每个 IO 点检查用户空间数据。但是,如果 JS 只是在客户端并且如果那个人正在 hack JS,那么他唯一要破解的是 他自己对系统的看法,对吗?所以 JS 的“安全”就变得没用了。
这样说吧:如果我的 PHP 代码非常好,没有数据会未经过滤,而且这些过滤器是 100% 安全的,那么 JS 安全性就失去了它的价值,对吧?
换句话说,我可以(安全地)做:
var foo = $('input#foo-input').val();
$.post('foo.php', {action: foo}, function(r) {
$('div#foo').html(r);
});
3。 JS 安全是否会因为 PHP 进行安全检查而失去其价值?
此外,如果我所有的 PHP 代码都是垃圾,并且我确实拥有所有 最佳 JS 安全性,那么它仍然可以通过查看代码来绕过,对吗?我的意思是,我们现在确实在浏览器上拥有了所有这些很酷的 JS 控制台,它们可以做各种各样的事情。他可以用一个简单的 $.post() 打开一个 JS 控制台并发布任何他想要的东西,对吧?然后我们回到 PHP 需要过滤用户空间数据的第一步......
这让我想到了我脑海中的潜在问题:
4。 JS Security 一文不值?
我的意思是,这只是偏执狂吗?我知道你做的安全检查越多越好,但是当你想象一个世界上最好和最坚定的黑客试图破解你的系统时(假设他不会直接利用你的服务器),缩小,模糊和保护JS代码变得没用了——毕竟这家伙手里有所有代码要分析,他只需要耐心。
【问题讨论】:
-
如果用户试图破坏您的安全性,这是另一件事。它还减少了服务器的负载,因为可以在客户端检测到意外错误,然后再打扰服务器。
-
它还可以帮助提升用户体验。如果您在 JavaScipt 中进行了验证检查,则页面不必在每次出错时重新加载。
标签: javascript php security