ASP.NET web窗体是否验证单选按钮值?
我有一个包含单选按钮列表的ASP.NET web表单。每个单选按钮都有一个与其关联的值。单选按钮列表具有验证程序控件,以确保至少选中一个按钮ASP.NET web窗体是否验证单选按钮值?,asp.net,security,validation,http,webforms,Asp.net,Security,Validation,Http,Webforms,我有一个包含单选按钮列表的ASP.NET web表单。每个单选按钮都有一个与其关联的值。单选按钮列表具有验证程序控件,以确保至少选中一个按钮 <input name="Country" value="US" id="CountryUS" type="radio" runat="server" /> <input name="Country" value="Other" id="CountryOther" type="radio" runat="server" /> 如果
<input name="Country" value="US" id="CountryUS" type="radio" runat="server" />
<input name="Country" value="Other" id="CountryOther" type="radio" runat="server" />
如果第二个被选中,HTTP流量将被删除
Country=Other
因此,该值是自由且清晰的,可以被篡改(例如,使用Paros),几乎与查询字符串可以被篡改一样容易
Country=Other'+DROP+TABLE+Users
通常在页面上调用page.Validate()来触发服务器端验证。然而,在这种情况下,单选按钮的验证只是一个选定的索引验证器没有明确检查值的验证器
我如何知道客户没有篡改价值?它在ViewState中是否重复,ASP.NET是否自动检查它?或者黑客可以把他们想要的任何东西放进去,然后本质上向我的系统中注入一个字符串(除非我在代码中手动验证)?通过少量实验,我确定了以下几点:
进行了更多类似性质的测试,但使用了下拉控件。同样的发现。此外,如果启用了页面事件验证,则如果表单/post值与dropdownlist标记中的任何项的值不匹配(或以编程方式添加,如在ViewState中持久化),ASP将引发异常。也就是说,这使得无法在客户端添加其他列表项。所有Web请求都可以被拦截,这就是为什么我们有SSL和参数化查询。更正:所有Web请求都可以被拦截,这就是为什么我们有SSL、参数化查询和服务器端验证。在这种情况下,该字段应该根据白名单{“US”,“Other}进行验证。我的问题是,我是否需要自己进行验证,或者框架是否为我进行验证,例如,当我调用page.Validate时(似乎不太可能),或者当框架解析表单/帖子以填充我的web控件的状态时(更有可能).我会使用一个合适的RadioButtonList和一个CustomValidator…然后你可以在服务器端实现逻辑来验证你自己。
Country=Other'+DROP+TABLE+Users