我在安全审核期间遇到了一个奇怪的要求,我必须防止在asp.net网络表单中通过HTTP GET发送用户名和密码。
情景就是这样。
我们有简单的asp.net登录表单,包含用户名,密码和提交按钮(POST方法)。在安全审查期间,安全测试人员使用某个代理工具(Burp Suite)将Form方法更改为GET,然后将用户名和密码作为查询字符串发送。
GET /Login.aspx?_LASTFOCUS=&_EVENTTARGET=&_EENTENTGUMENT=&_VIEWSTATE=''&_SCROLLPOSITIONX=0& ; _SCROLLPOSITIONY = 0&安培; __ EVENTVALIDATION =%2FwEWCgKm973fCgKOieLQt9kH6PhK0wq%2FpfP8pXG%2FF&安培; %24txtUser=abc@abc.com& txtPassword = 1233&安培;%24btnLogin =登录
根据安全测试团队的说法,GET(使用代理工具将表单方法更改为GET)方法不应该在查询字符串中传递用户密码。(根据我的理解,GET将始终将值作为查询字符串传递,即使它是密码场)
答案 0 :(得分:1)
实现所需内容的一种简单方法是将服务器端指定为仅查看发布值服务器端并忽略查询字符串项,例如使用
Request.Form["foo"]
而不是
Request["foo"]
或
Request.QueryString["foo"]
没有安全理由,你真的只想使用SSL。