Javascript firebug或开发工具可以用来攻击网站吗?

Javascript firebug或开发工具可以用来攻击网站吗?,javascript,jquery,html,Javascript,Jquery,Html,在一个网站中实现一些特定于角色的特性时,我遇到了一个有趣的问题 这类似于,如果登录用户具有管理员角色权限,则按钮(称为传输)将启用,否则其他用户应禁用(因此他们无法单击,因此无法执行事务/或调用相关逻辑) 乍一看,这似乎是相当直截了当的事情。如果登录用户具有管理员权限,我们只需启用该按钮 因此,在实现了这种方法(工作正常)之后,我正在使用Chrome开发工具调试代码。我注意到,尽管按钮现在已禁用,但我们实际上可以使用该工具删除禁用的部分来启用它 然后我可以单击它并调用函数。所以基本上这不是一个

在一个网站中实现一些特定于角色的特性时,我遇到了一个有趣的问题

这类似于,如果登录用户具有管理员角色权限,则按钮(称为传输)将启用,否则其他用户应禁用(因此他们无法单击,因此无法执行事务/或调用相关逻辑)

乍一看,这似乎是相当直截了当的事情。如果登录用户具有管理员权限,我们只需启用该按钮

因此,在实现了这种方法(工作正常)之后,我正在使用Chrome开发工具调试代码。我注意到,尽管按钮现在已禁用,但我们实际上可以使用该工具删除禁用的
部分来启用它

然后我可以单击它并调用函数。所以基本上这不是一个好方法。但幸运的是,还有服务端验证。但如果不是这样,这可能是一个巨大的安全漏洞

因此,基本上,进行服务器/服务/后端验证可以防止危险的事情发生。但是,由于用户实际上可以单击它,并且至少可以尝试调用这些方法,这似乎不太好:(

所以,我很想知道,我们怎样才能防止这种情况

好的,我的问题很简单:

禁用组件是否有好处?

“不要”在视图中使用禁用的组件。
这是您业务逻辑的一部分,不应该出现在DOM中

“但是嘿:)…”

现在,即使该元素不存在,也无法阻止用户手动将该元素嵌入您的网站。
您应该始终执行服务器端检查,以查看该用户是否具有执行特定操作的实际权限

有时在UI中使用
禁用的
元素来显示用户:
“嘿,看到这个按钮了吗?除非你付钱或诸如此类,否则它不是给你的”
但通常作为第二步/可选动作元素

有时,整个表单在网站上“可见”,但被禁用
此类用例为:带有步骤的付款表单,其中设计师希望让用户知道他需要填写前一个表单,以便“激活”第二个表单并继续付款等。。。案例是无穷无尽的,但是如果网站上存在表单,那么它就是纯UI(视图),除非(如我所说)业务逻辑指定,否则模型永远不应该接受来自控制器的值


请记住,前端Javascript仅用于通知和帮助用户通过直观的界面系统。JS事件应该只是反映用户可以做什么和不能做什么

由于任何精通技术的用户都可以绕过JS,因此在后端,您需要再次重建类似且更强大的安全逻辑

(!)在前端验证用户输入,但最重要的是在后端验证用户输入。


firebug或开发工具可以用来攻击网站吗

直接

    • 如果可以通过操纵视图(源)利用网站后端逻辑
    • 如果你在代码中保留了进入浏览器的敏感信息(如评论等)
    • 如果一个网站不允许XSS,则具有强大的后端安全性
间接地


恶意用户最终可能会要求用户打开控制台(欺骗用户控制台是实际的网站功能),并向其发送(复制/粘贴)其中存在的私人信息,如会话密钥、cookie、,等等。

当服务器收到请求时,您应该检查它是否有效,因为我在不到10秒内成功地使按钮工作。

取决于您的服务器端编程语言,您可以使用模板来生成HTML页面,这样某些用户不允许使用的组件在一开始就不会被呈现


对于Java,您有JSP/JSTL或JSF;对于.Net,您有ASP.Net和MVC。

您应该绝对验证与服务器端登录/权限有关的所有内容。即使您更改了站点,而不是禁用元素,但一开始就不会将其附加到DOM,一个精通技术的用户也可以尝试向您的服务器发送不同的数据,并使用wget或curl请求有意义的响应。如何防止这些情况? 是否应该禁用组件

第一个问题的答案是第二个问题的答案

你不应该在客户端这样做。然而,这是一种常见的情况,始终建议您进行服务器端检查,以适应使用开发人员工具解决这些问题的人员

除了不实现这一点之外,另一种方法是抽象它

如果用户尚未登录,甚至不要在DOM中包含该按钮。 当他们传递给他们按钮所需的特定参数时,您可以使用javascript发出服务器端请求,对此进行验证,然后适当地注入按钮,即使在这种情况下,在触发按钮后,您也应该有另一个服务器端请求来验证操作

  • 按钮显示参数
  • 证实
  • 注入按钮
  • 触发按钮
  • 证实
  • 行动
这实际上取决于应用程序的布局。实际上,如果您不包括前两个步骤,并且在验证之前只隐藏按钮,那么您的应用程序UX中不会有任何更改,除非开发人员是您的用户体验的一部分