日期:2014-05-18  浏览次数:20745 次

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 包装的