【问题标题】:ASP.NET WebForms can you manipulate control values client-side to be used on a postbackASP.NET WebForms 可以在客户端操作控件值以用于回发
【发布时间】:2014-04-16 06:11:41
【问题描述】:

对不起标题,不知道最简单的说法。

我正在将 ASP.NET vb.net 与 Web 表单一起使用。我在页面上有一个下拉列表控件。 目前当所选的下拉目更改时,它会在按钮上回发,然后单击“选择”值

我想知道是否有可能(通过黑客等)操纵下拉列表的值或在网络请求中发送更改后的值,以便它们可以在下拉列表定义的选项服务器端之外。

例如

Private Sub testbutton_Click(sender As Object, e As EventArgs) Handles testbutton.Click
   Dim test As String = testdropDown.SelectedItem.Value
   testlabel.text = test
End Sub

如果用户在定义的值之外更改了选定的值,是否可以用诸如 xss 之类的内容填充标签。

或者,如果我将该值放入 SQL 查询中,并且只想要 1-10 的选项,他们是否可以更改下拉值以输入 25 并将其成功传递到查询中?

【问题讨论】:

    标签: asp.net sql webforms code-injection


    【解决方案1】:

    是的,这是可能的,但 ASP.NET 有构建机制来避免它 http://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx 。即使在客户端更改了值并且它与视图状态不匹配,它也会抛出异常。如果您不更改任何默认设置,我认为您是安全的。无法使用客户端逻辑更改下拉列表的值,由于 EnableViewStateMac 属性,它将在 .net 中引发损坏视图状态的异常。

             int val;
             if(int.TryParse(Request.QueryString["val"]),val){
                  //now check the range or custom business logic
                  if(val > A1 || val < A2)
                       throw new Applicationexception("Out of range");
                  //process here
    
             }else{
                throw new Applicationexception("Some issue");
             }
    

    【讨论】:

    • 在没有恶意传递的情况下,例如下拉列表范围之外的值。就像 1-10 是有效的一样,我将其更改为将 25 作为值传递给查询。
    • 你必须在你的代码中进行这种验证。有一个允许的值的白名单。请查看我的更新答案
    • 啊对不起,我不认为你理解我,我理解这样的验证检查,我的界限只是一个理论问题。我不知道您是否也知道我的意思,也发布了 request.querystring 答案。我在谈论一个下拉列表,我可以在客户端操作它的值吗,比如将下拉值从 1 更改为 30,当回发发生时,它会将其读取为 30 而不是 5,或者服务器是否只知道它是 5 并处理 5。
    • 由于 EnableViewStateMac 属性,它不可能在 .net 中引发损坏视图状态的异常。
    • 当我尝试快速完成时,使用下拉菜单、按钮和标签。如果我更改下拉值客户端然后单击按钮,它将返回原始下拉值。没有视图状态错误。不过,我还没有尝试操纵服务器请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2017-09-10
    相关资源
    最近更新 更多