【问题标题】:How safe are disabled buttons in React?React 中禁用的按钮有多安全?
【发布时间】:2020-08-29 16:55:06
【问题描述】:

我刚刚发现在开发人员工具中编辑按钮以启用禁用的按钮不会改变任何事情。该按钮以某种方式在内部保持禁用状态。 (虽然禁用的样式效果被移除了)

//This is how the button looks like in Chrome developer tools

<button disabled>Post</button>

//editing out "disabled" does nothing. The click event doesn't get called

有趣的是,尝试禁用启用的按钮也不会改变任何事情。 onClick 方法在被点击时仍然会被调用。

在我发现之前,我总是使用一个标志来阻止点击,以防恶意用户启用该按钮。

....
const [enabled, setEnabled] = useState(false)
....

....
const postData = () = {
   if(!enabled) return;

   //sensitive action takes place here
}
....

....
return(
    <button disabled={!enabled} onClick={postData}>Post</button>
);
....

我只想知道从postData() 函数中删除if(!enabled) return; 行是否完全安全。是否有其他工具可以真正启用禁用的反应按钮或直接调用postData()

【问题讨论】:

  • 您可以将决定是否应在事件处理程序中禁用按钮的完全相同的代码放入(如果应该立即return)。但如果这是一个安全问题,一般规则是永远不要相信前端发送给您的内容,并在服务器端调整您的行为
  • @Treycos 这不是我在示例中所做的还是我遗漏了什么?

标签: html reactjs events button disabled-input


【解决方案1】:

disabled 按钮在 React 中和在 HTML 中一样安全。最终浏览器理解和获得的是 DOM 元素,在浏览器上渲染的 React 也不例外。也就是说,永远不要单独依赖前端来确保任何安全性,还要进行服务器端验证和安全检查。

【讨论】:

  • 我明白了。所以你是说有没有国旗没有区别,而且永远不安全?
  • 是的,确实如此。你永远不能 100% 依赖它。
  • Web 前端代码的可修改性多么容易令人恐惧。我想知道移动和桌面应用程序开发人员是否必须担心这样的事情。
  • 是的,他们大多这样做。他们的大部分安全措施都在他们的后端
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 2015-10-08
  • 2020-06-23
  • 2018-12-09
  • 2016-03-04
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
相关资源
最近更新 更多