FineUI 官方论坛

标题: 按钮禁用状态, _doPostBack仍然可以执行服务器事件 [打印本页]

作者: hcp    时间: 2016-7-6 15:23
标题: 按钮禁用状态, _doPostBack仍然可以执行服务器事件
Button处于Disabled状态, 但是用javascript调用 __doPostBack('<%=btn.UniqueID%>', ''); 仍然可以执行服务器端的OnClick事件, 这算不算一个漏洞?


作者: zy32002    时间: 2016-7-6 16:14
设置隐藏把
作者: sanshi    时间: 2016-7-6 18:00
不是BUG。调用前你可以先检查按钮的状态
作者: sanshi    时间: 2016-7-6 18:00
不是BUG,也不是漏洞,UI仅仅是作为显示状态的呈现,所有JS端的验证都可以绕过去,所以对于安全性高的程序,需要在服务器端做各种验证。
调用前你可以先检查按钮的状态

作者: hcp    时间: 2016-7-7 16:55
本帖最后由 hcp 于 2016-7-7 17:03 编辑
sanshi 发表于 2016-7-6 18:00
不是BUG,也不是漏洞,UI仅仅是作为显示状态的呈现,所有JS端的验证都可以绕过去,所以对于安全性高的程序 ...

那你们的控件为什么不能在服务器端触发Onclick事件之前判断一下按钮的状态, 如果是禁用或隐藏的就不予执行呢?
如果照你说的, 我们程序里所有Button的Click事件处理程序里都要先判断一下按钮是否禁用或隐藏. 不麻烦吗?

而且这明显就是个漏洞, 表面上按钮状态是禁用的, 可是后台代码仍然可以被调用, 如果恶意用户通过篡改提交的请求数据, 就可以执行其授权之外的操作.
原生Asp.Net的按钮控件就没有这样的问题.
作者: sanshi    时间: 2016-7-7 17:28
hcp 发表于 2016-7-7 16:55
那你们的控件为什么不能在服务器端触发Onclick事件之前判断一下按钮的状态, 如果是禁用或隐藏的就不予执行 ...

这个不是漏洞,也不是BUG,道理我上面已经说了。你可以再考虑下

至于你提到的:
后台代码仍然可以被调用, 如果恶意用户通过篡改提交的请求数据, 就可以执行其授权之外的操作.

的确是这样的,所以说UI只是状态的反映,而不是状态本身。如果你看AppBox的代码,在按钮的执行事件中都要进行权限检查


换个角度说:
客户端的所有状态都可以手工改变,按钮是否禁用在客户端就能改变,那么服务器端又如何得知从客户端拿到的按钮禁用状态是真的,还是伪造的呢?



至于你提到的:
原生Asp.Net的按钮控件就没有这样的问题.

这就错了,原生Asp.Net按钮控件也是一样的。要注意区分 点击禁用按钮执行按钮的脚本 两者的区别!

我写了个例子,验证这个说法:

  1. <asp:Button runat="server" ID="Button1" Text="禁用的" Enabled="false" OnClick="Button1_Click" />
  2. <input type="button" onclick="__doPostBack('Button1', '');" value="启用的" />
  3. <br />
  4. <br />
  5. <asp:Label runat="server" ID="Label1"></asp:Label>

  6. <br />
  7. <br />
  8. 下面这个LinkButton是为了在页面上生成 __doPostBack 函数,请忽略
  9. <asp:LinkButton runat="server"></asp:LinkButton>
复制代码


后台代码:
  1. public partial class WebForm2 : System.Web.UI.Page
  2. {
  3.         protected void Page_Load(object sender, EventArgs e)
  4.         {

  5.         }

  6.         protected void Button1_Click(object sender, EventArgs e)
  7.         {
  8.                 Label1.Text = DateTime.Now.ToString();
  9.         }
  10. }
复制代码


点击 “启用的” 按钮,后台调用的是 “禁用的” 按钮的执行事件,正常运行:
[attach]8974[/attach]


作者: hcp    时间: 2016-7-7 18:06
sanshi 发表于 2016-7-7 17:28
这个不是漏洞,也不是BUG,道理我上面已经说了。你可以再考虑下

至于你提到的:

你说的有道理, asp.net原生控件的是我记错了, 对不住啊 .
作者: sanshi    时间: 2016-7-7 18:11
hcp 发表于 2016-7-7 18:06
你说的有道理, asp.net原生控件的是我记错了, 对不住啊 .

技术讨论,很正常.....
作者: sanshi    时间: 2016-7-7 18:15
这个帖子发到QQ群后,大家都踊跃发言,但就是没人在这叽歪,这帮骚男。。。。

为了让后来者更加接近事件真相,把一些截图放在这里:
[attach]8975[/attach]
[attach]8977[/attach]
[attach]8978[/attach]
[attach]8979[/attach]
[attach]8980[/attach]
[attach]8981[/attach]
[attach]8982[/attach]
[attach]8983[/attach]
[attach]8984[/attach]
[attach]8985[/attach]
[attach]8986[/attach]
最后一位用户说出的事件真相:应该买专业版!









欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4