我有一个包含单选按钮列表的 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" />
据我了解,HTTP 将单选按钮转换为名称/值对,其中名称是单选按钮的名称,值是关联的值(不是真/假)。
如果选中第一个单选按钮,则 HTTP 流量将为
Country=US
如果选中第二个,则 HTTP 流量将为
Country=Other
因此,该值是自由且清晰的,几乎可以像查询字符串被篡改一样容易地被篡改(例如使用 Paros)。
Country=Other'+DROP+TABLE+Users
通常在页面上,您会调用 page.Validate() 来触发服务器端验证。然而,在这种情况下,单选按钮的验证只是一个选定的索引验证器。 没有明确检查 value 的验证器。
我怎么知道客户没有篡改价值?它在 ViewState 中是否重复,并且 ASP.NET 会自动检查它吗?或者黑客可以把他们想要的任何东西放在那里,然后将一个字符串注入我的系统(除非我在代码中手动验证它)?