【问题标题】:ASP.NET PageMethods parameter securityASP.NET PageMethods 参数安全
【发布时间】:2014-08-07 23:11:49
【问题描述】:
我有一个只有经过身份验证的用户才能访问的 asp.net 页面。在此页面上,用户可以更新他们的密码。我通过 PageMethods 执行此操作并将密码作为参数传递。
这个密码有多安全?可以拦截吗?对敏感数据使用回发而不是 PageMethods 的安全性如何?
【问题讨论】:
标签:
asp.net
security
parameters
webmethod
pagemethods
【解决方案1】:
由于没有 HTTPS,这很容易受到MITM 攻击。
回发更安全(如果您正在加密 ViewState),因为这将保护您免受CSRF 的侵害。来自Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet:
ASP.NET 可以选择维护您的 ViewState。 ViewState 指示页面在提交到服务器时的状态。状态是通过放置在每个页面上的隐藏字段和控件来定义的。 Viewstate 可以用作 CSRF 防御,因为攻击者很难伪造有效的 Viewstate。伪造有效的 Viewstate 并非不可能,因为攻击者可以获取或猜测参数值是可行的。但是,如果将当前会话 ID 添加到 ViewState,它会使每个 Viewstate 都是唯一的,因此不受 CSRF 影响。
使用 ViewState 中的 ViewStateUserKey 属性来防止欺骗性回发。在Page派生类的OnInit虚方法中添加如下(该属性必须在Page.Init事件中设置)
您可以使用 PageMethods,但您必须添加一个反 CSRF 令牌(用于 Synchronizer 令牌模式或双重提交 Cookies 方法),或者您可以验证请求中是否设置了 X-Requested-With or Origin。
但是,由于这是一个密码重置表单,针对 CSRF 的有效防御措施是询问用户以前在 XHR 中发送的密码。由于攻击者不知道他们的旧密码,这种形式不能被 CSRF 滥用。