当您使用GET请求通过您的站点传递变量时,您是否在使用它们之前验证它们(正则表达式,过滤器等)?
假设您有网址http://www.example.com/i=45&p=custform.你知道"i"将永远是一个整数,"p"将始终只包含字母和/或数字.是否值得花时间确保没有人试图操纵值然后重新提交页面?
是.毫无疑问.绝不相信用户输入.
为了改善用户体验,可以在客户端上验证输入字段(以及恕我直言).这可以抢先到服务器的往返,只会导致相同的表单和错误消息.
但是,必须始终输入在服务器端验证因为用户只需在GET URL中手动更改输入数据或发送精心设计的POST数据.
在最糟糕的情况下,最终可能会出现SQL注入,甚至更糟糕的是XSS漏洞.
大多数框架已经有一些内置的方法来清理输入,但即使没有这个,通常很容易使用常规异常和查找表的组合来清理输入.
假设你知道它是一个整数,使用int.Parse或者匹配正则表达式"^\d + $".
如果它是一个字符串并且选项有限,请创建一个字典并通过它运行字符串.如果没有匹配,请将字符串更改为默认值.
如果它是用户指定的字符串,则将其与严格的正则表达式匹配,例如"^\w + $"