FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 5861|回复: 8
打印 上一主题 下一主题

按钮禁用状态, _doPostBack仍然可以执行服务器事件

[复制链接]
跳转到指定楼层
楼主
发表于 2016-7-6 15:23:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Button处于Disabled状态, 但是用javascript调用 __doPostBack('<%=btn.UniqueID%>', ''); 仍然可以执行服务器端的OnClick事件, 这算不算一个漏洞?

沙发
发表于 2016-7-6 16:14:27 | 只看该作者
设置隐藏把
板凳
发表于 2016-7-6 18:00:35 | 只看该作者
不是BUG。调用前你可以先检查按钮的状态
地板
发表于 2016-7-6 18:00:39 | 只看该作者
不是BUG,也不是漏洞,UI仅仅是作为显示状态的呈现,所有JS端的验证都可以绕过去,所以对于安全性高的程序,需要在服务器端做各种验证。
调用前你可以先检查按钮的状态
5#
 楼主| 发表于 2016-7-7 16:55:30 | 只看该作者
本帖最后由 hcp 于 2016-7-7 17:03 编辑
sanshi 发表于 2016-7-6 18:00
不是BUG,也不是漏洞,UI仅仅是作为显示状态的呈现,所有JS端的验证都可以绕过去,所以对于安全性高的程序 ...

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

而且这明显就是个漏洞, 表面上按钮状态是禁用的, 可是后台代码仍然可以被调用, 如果恶意用户通过篡改提交的请求数据, 就可以执行其授权之外的操作.
原生Asp.Net的按钮控件就没有这样的问题.
6#
发表于 2016-7-7 17:28:39 | 只看该作者
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. }
复制代码


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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
7#
 楼主| 发表于 2016-7-7 18:06:35 | 只看该作者
sanshi 发表于 2016-7-7 17:28
这个不是漏洞,也不是BUG,道理我上面已经说了。你可以再考虑下

至于你提到的:

你说的有道理, asp.net原生控件的是我记错了, 对不住啊 .
8#
发表于 2016-7-7 18:11:55 | 只看该作者
hcp 发表于 2016-7-7 18:06
你说的有道理, asp.net原生控件的是我记错了, 对不住啊 .

技术讨论,很正常.....
9#
发表于 2016-7-7 18:15:44 | 只看该作者
这个帖子发到QQ群后,大家都踊跃发言,但就是没人在这叽歪,这帮骚男。。。。

为了让后来者更加接近事件真相,把一些截图放在这里:











最后一位用户说出的事件真相:应该买专业版!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-23 02:10 , Processed in 0.048982 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表