在我们最近的应用程序中,我们在JS文件中使用了大量的AJAX来避免频繁的回发。但是我只是通过检查JS文件来担心公众进入我们的一些业务逻辑。他们还可以使用firebug或此类功能更改发送到服务器的数据。那么我们如何避免这种情况并保护我们的代码不被世界轻易看到。
在这种情况下,公众可以轻松查看服务器端功能,参数等。那么我们怎样才能在一定程度上避免这种头痛。
var param = { id: id };
var param = JSON.stringify(param);
$.ajax({
type: "POST",
url: "qmaker.aspx/deleteQuestion",
data: param,
contentType: "application/json; charset=utf-8",
dataType: "json",
global: false,
beforeSend: function () {
$.blockUI({
message: '<h3>Deleting Question..<br><small>Please wait for a moment...</small></h3>'
});
},
success: function (data) {
if (data.d == 1) {
var n = noty( type: 'success', text: 'Question Deleted successfully.', /* ... */)
var oTable = $('#table_question).DataTable();
var row = oTable.row($(that).parents('tr:first'));
/* ... */
答案 0 :(得分:2)
您无法选择客户端发送给您的内容。我甚至无需阅读您的HTML即可提交表单。
您也无法选择您发送给客户的内容,客户可能阅读也可能不阅读。你给我发了一个JS档案,现在已经不在了你的手中。
在传统程序中,您可以通过编译来相对安全地销售程序,因为原始源代码无法恢复某些不可恢复的定义。
使用JavaScript,您可以将代码发送到浏览器,并让他们很好地执行它。您不能指望浏览器不会读取所有代码,对吧?那么为什么你会期望使用浏览器查看你页面的用户呢?
即使有关业务逻辑的详细信息泄露,也请确保您的应用程序是安全且密不清的。即使攻击者知道系统的所有内容(包括源代码和数据库结构),良好的安全性仍然很强。
您无需将服务器的内部工作方式公开给JavaScript。您提出的“代码”并没有真正揭示服务器的工作方式,我所知道的是qmaker.aspx上有一个支持deleteQuestion
路径的页面,当我点击它时, ID,该问题将被删除。现在由你来思考攻击者可能会对此信息做些什么,并密封任何攻击媒介。
答案 1 :(得分:1)
如果您想使其安全,您应该实现身份验证和标记化请求。这样,如果公众看到请求并不重要,他们将无法在未经过身份验证和拥有有效令牌的情况下成功获得请求。
编辑如下:提供一些额外信息。
当然,在您的应用程序中,您实现了某种登录,因此用户经过身份验证并被允许(或禁止)使用您应用程序的某些部分。
当用户登录时,您可以在服务器端生成(临时)令牌,存储它并通过浏览器会话或类似方式将其传递给用户。然后将令牌作为参数传递给ajax调用。
$ajax(url, {
data: {
token: session.token,
action: 'delete',
id: entryID
}
}
服务器将检查令牌是否已通过,并且它对db记录有效。如果它只是执行请求的操作并返回一个回复,或者它只能返回一个401(未经授权的)错误..
如果您想要更高级且更安全的东西,可以搜索oauth 2.0身份验证。