在向jQueryUI对话框添加按钮时,如何防止有人更改或避免我的JavaScript逻辑?

在向jQueryUI对话框添加按钮时,如何防止有人更改或避免我的JavaScript逻辑?,javascript,jquery,jquery-ui-dialog,developer-tools,entitlements,Javascript,Jquery,Jquery Ui Dialog,Developer Tools,Entitlements,我使用的是一个jQueryUI对话框,基于一些授权逻辑。(如果我有权,我会从服务器端AJAX调用中传入一个布尔值,然后根据该标志显示不同的按钮。) 我关心的是,是什么阻止某人使用像Firebug这样的开发工具,并在执行检查的那一行上设置断点,或者更改标志,或者拖动以跳过权限检查 因此,我的问题是专门针对在jQuery UI对话框中添加按钮(因为这不像是从服务器端添加按钮,因为它是一个jQuery插件),但我想它突出了客户端上任何权限逻辑“易受攻击”的一个更一般的点。因此,如果在这一点上有任何通用

我使用的是一个jQueryUI对话框,基于一些授权逻辑。(如果我有权,我会从服务器端AJAX调用中传入一个布尔值,然后根据该标志显示不同的按钮。)

我关心的是,是什么阻止某人使用像Firebug这样的开发工具,并在执行检查的那一行上设置断点,或者更改标志,或者拖动以跳过权限检查

因此,我的问题是专门针对在jQuery UI对话框中添加按钮(因为这不像是从服务器端添加按钮,因为它是一个jQuery插件),但我想它突出了客户端上任何权限逻辑“易受攻击”的一个更一般的点。因此,如果在这一点上有任何通用的最佳实践,我会感兴趣(但仍在寻找我的具体示例的答案)


注意:我还将POST作为备份进行服务器端授权检查,因此我仍然受到“保护”,但我仍然担心上述问题。

您无法控制客户端将对您的脚本执行什么操作,也无法控制他们将对您的服务器发出什么请求。您必须将后端API(而不是JS客户端)设计为用户和系统之间的“门控机制”。最好不要将JS视为系统的一部分,而是将其视为单独的客户端,作为API的参考实现提供


但是,如果您想至少让用户难以处理您的代码,您可以缩小JS脚本并将其与类似的内容连接起来。

您无法控制客户端将对您的脚本执行什么操作,也无法控制客户端将对您的服务器发出什么请求。您必须将后端API(而不是JS客户端)设计为用户和系统之间的“门控机制”。最好不要将JS视为系统的一部分,而是将其视为单独的客户端,作为API的参考实现提供


但是,如果您想至少让用户难以处理您的代码,您可以缩小JS脚本并用类似的东西连接它。

没有什么可以阻止人们修改客户端代码,这是不可避免的

但是,您可以添加类似“服务器端”的按钮,您只需使用AJAX调用检索字符串,这恰好是一个添加按钮的JavaScript函数。在客户端,对该字符串执行
eval()
,该字符串将执行检索到的JS函数并添加按钮。此外,您可以通过这种方式传输整个JavaScript代码,因此客户端不能跳过任何内容,因为所有内容都是在
eval()
中执行的

一个简单的例子:

服务器端函数返回

string banana= "alert('test');";
return banana;
而客户端是这样做的

eval(response.d);

这里有一个理论上的例子:

没有什么可以阻止人们修改客户端代码,这是不可避免的

但是,您可以添加类似“服务器端”的按钮,您只需使用AJAX调用检索字符串,这恰好是一个添加按钮的JavaScript函数。在客户端,对该字符串执行
eval()
,该字符串将执行检索到的JS函数并添加按钮。此外,您可以通过这种方式传输整个JavaScript代码,因此客户端不能跳过任何内容,因为所有内容都是在
eval()
中执行的

一个简单的例子:

服务器端函数返回

string banana= "alert('test');";
return banana;
而客户端是这样做的

eval(response.d);

下面是一个理论上的例子:

正如另一个人所建议的,您不能在客户端上实现安全性,原因正是您所指出的。您可以使用基本身份验证,或者尝试设置基于令牌的方法。

正如其他人所建议的,您无法在客户端上实现安全性,原因正是您指出的。您可以使用基本身份验证,或者尝试设置基于令牌的方法。

正如我提到的,bankend API确实在服务器端验证实体,但我也认为最好在客户端添加此逻辑,以便为用户提供更明确的体验(不要让它看起来像他们有能力做某事,然后单击SAVE,它返回一个错误,说“你没有保存权限”),正如我提到的,bankend API确实在服务器端验证实体,但我也认为在客户端添加此逻辑给用户一个更明确的体验是很好的(不要让它看起来像他们有能力做某事,然后单击“保存”,它会返回一个错误,说“你没有保存权限”),这是正确的方法。不要在客户端存储任何权限逻辑,而是在服务器上检查它(基于身份验证数据)并从服务器返回相关的UI相关代码。这并不会像上面所说的那样使客户端操作变得不可能,但至少会妨碍它们。事实上,从技术上讲,从ajax调用中检索字符串后可以中断,并在评估之前对其进行调整,但这会降低工作的价值,人们可能不会同时这样做r、 这是正确的方法。不要在客户端存储任何授权逻辑,而是在服务器上检查它(基于身份验证数据)并从服务器返回相关的UI相关代码。这并不会像上面所说的那样使客户端操作变得不可能,但至少会妨碍它们。事实上,从技术上讲,从ajax调用中检索字符串后可以中断,并在评估之前对其进行调整,但这会降低工作的价值,人们可能不会同时这样做R