【发布时间】:2013-12-06 15:35:35
【问题描述】:
我目前正在构建一个框架,例如 form submit 被实现为 jQuery ajax 调用 .php(服务)文件。
部分jQuery供参考:
var dataSerialized = $(form).serialize();
var service = $(form).attr("action");
$.ajax({
url: "services/" + service + ".php",
data: dataSerialized,
type: "POST",
cache: false,
dataType: "json",
success: function(json) {
$(json).each(function() {
loadPage(this.callback);
});
},
error: function(json, message) {
finalError(message);
}
});
而.php 目前所做的不过是:
include_once("../content/includes/connect.php");
include_once("_functions.php");
//TODO: support sending variables
$check = true;
$callback = "error";
foreach ($_POST as $key => $value) {
list($pass, $errormessage) = checkRules("register", $key, $value);
if (!$pass) {
$check = false;
$callback = "error";
break;
}
}
if ($check) {
$callback = "register_success";
}
echo json_encode(array(
"callback" => $callback
));
SQL::close();
现在我希望服务调用尽可能安全,鉴于我的情况,我看到以下选项:
- 不能使用 SSL,因为它相对来说太贵了。只是在做一个国产项目,没什么重要的。
- 无法使用 jCryption 库,因为我使用的是廉价的虚拟主机,并且无法访问服务器本身。
- OAuth 2.0 是一种可能,但似乎相当复杂。
-
$_SERVER变量可用于帮助保护服务.php页面,但不可靠。 -
$_SESSION可用于生成令牌。
我已经实施了一个简单的措施:将GET 更改为POST。这只会阻止最简单的攻击,现在攻击者实际上需要使用一些篡改工具,而不是能够直接通过浏览器进行。
我认为我可以保护来自在浏览器中输入的 URL 的每个呼叫,但是我看到两个严重的威胁:
- 向网络服务器直接请求:攻击者可以传递他想要的任何数据。
- 使用浏览器 JavaScript 控制台发送自定义
jQuery请求。
在这种情况下,我认为最好还是尝试使用 $_SESSION 令牌保护服务 .php 页面,但我该怎么做呢?
它们需要在服务调用之前的某个时间点设置,然后服务调用可以检查它。
我还可以访问MySQL 数据库,当然还有网络空间上的纯文本文件。
谁能帮帮我?
【问题讨论】:
-
为什么不根据当前时间戳生成令牌并稍后验证呢?
-
您的网络应用程序中是否已经有某种形式的身份验证?
-
@Pekka웃 还没有认证。除了常规的输入检查。
标签: javascript php jquery ajax session