JSP防注问题,模仿asp程序时,有几个问题,求各位帮助,谢!
各位大哥,通过url传值的方式,比如 www.abc.com/read.jsp?id=2 能正常显示该条记录,但是如果有人想试试注入功能,他一般会在 www.abc.com/read.jsp?id=2 后加一个 ' ,就是www.abc.com/read.jsp?id=2 ' 这时jsp网页会出错,现在请问如何在对方www.abc.com/read.jsp?id=2 ' 后弹出框提示:非法参加! 这样的功能??
在asp中有以下功能可以限制,不知在jsp如何实现:
<%
if not isnumeric(request.querystring( "id ")) or request.querystring( "id ")= " " or request.querystring( "id ")= "0 " then
%>
<script language=javascript>
alert( "非法参数! ");
history.go(-1);;
</script>
<%
response.end
end if
%>
------解决方案--------------------if(!StringUtils.isBank() && StringUtils.isNumeric(request.getParament( "id "))){
}
------解决方案--------------------Integer.parseInt(id)
如果出了异常则表示有可能被人实验非法注入
------解决方案--------------------防止sql注入,要过滤‘,过滤or,过滤and等sql关键字,并且做session判断,可保万无一失
------解决方案--------------------不要使用statement,改用preapredStatement,它就没有注入问题,而且速度快。
------解决方案--------------------为了防止注入 一个简单的办法 就是把传入的参数用 两个 ' 替换一个 '
不过最好的方式还是还是
xiangbo520(充栋汗牛) ( ) 信誉:107 Blog 2007-01-16 22:09:14 得分: 0
不要使用statement,改用preapredStatement,它就没有注入问题,而且速度快。
这样有了预编译 执行速度会提高 而且 还能防止注入
我大概写了一下
很久没有使用直接使用jdbc 了
下面写的不知道对不对
Connection con = XXXXX;
String sql = "select * from abc where id = ? ";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, 1);
rs =ps.executeQuery();
jdbc 使用起来很麻烦
你要是不使用其它的 最好进行包装一下
你可以看看spring 是如何对jdbc 包装的