C#代码string strsql = "select * from news where id=" + Request.QueryString["id"].ToString();
从安全角度考虑,querystring当中的参数是不能直接用到查询语句当中去的!原因如下:
querystring当中的参数不一定存在或赋值,querystring获取的值在网址当中能看到,用户可以手动修改,如果用户不小心删掉某个数字或系统异常导致链接跳转出错,后台处理程序就会报错,因此,在使用之前要进行判断,if(Request.QueryString["id"]!=null),如果成立,通过string tempid=Request.QueryString["id"].ToString();
防止越权访问:如果直接在sql当中使用querystring当中的参数,在用户端人为修改参数值的时候,可以躲避系统的安全检查或条件选择,例如querystring里面id= 5 or 1=1,因为是直接使用参数的tostring方法,所以,sql语句变为:select * from news where id=1 or 1=1,这样就可以遍历所有用户信息。如果有些用户是不能公开访问的话,这样信息就泄漏了!
综上,一般操作步骤如下:
判断参数是否存在 if(Request.QueryString["id"]!=null) string tempid=Request.QueryString["id"].ToString();
判断参数是否符合条件 去除异常符号:可以通过正则匹配或string.replace()函数过滤空格、单引号等
将处理后的参数加入sql命令!
改正方法有:一、调试到获取到id;二、给Request.QueryString["id"]做一个空的判断
Request.QueryString["id"] == null ? null : Request.QueryString["id"].ToString()