呵呵,楼上的有意思! 我举个例子!比如页面你用的是text输入 <input name="xxx">处理是这样的 String xxx=request.getParameter("xxx"); String sql="select * from t where xxx='" + xxx +"'"; 那么这里就有一个严重的问题了当然如果是征程输入就没有问题,比如输入是abc sql语句变成select * from t where xxx='abc'但是你如果输入一个有趣的东西,结果就不一样了 比如输入 abc' or true -- 那么sql语句就变成 select * from t where xxx='abc' or true --' --之后就被注释掉了 where语句是恒成立的,那么就能看到你这个表俩面所有的数据了!
你好.我ASP会防止SQL漏洞.但是JSP不会.所以不知所措.你能提供解决的方法的吗?谢谢.
这个简单啊! 以后不能直接使用我刚才的办法执行sql语句了要这样 String xxx=request.getParameter("xxx"); PreparedStatement stmt=conn.prepareStatement("select * from t where xxx=?"); stmt.setString(1,xxx); rs=stmt.executeQuery();
用了TM的方法:E:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\corpserv\login_005fcheck_jsp.java:79: cannot resolve symbol symbol : method PreparedStatement (java.lang.String) location: class jmeport.conn PreparedStatement stmt=conn.PreparedStatement("select * from xx where user_name='"+user_name+"'"); ^出现了这样的错误...
晕,看来搂主对PreparedStatement是一点都不会用啊 你先查查api吧,呵呵
用预处理语句,可以防止sql注入: PreparedStatement pstmt=conn.prepareStatement(select * from t_user where user_id=? and user_name=?); pstmt.setInt(0,userid);//userid就是传进来的参数 pstmt.setInt(1,username);//username就是传进来的参数 pstmt.executeQuery();楼主照这个格式写就可以了。
ResultSet rs; String sql="select * from xx where user_name=?"; 第六行: PreparedStatement stmt=conn.preparedstatement(sql); stmt.setString(1,user_name); rs=stmt.executeQuery();现在我这样写的话,它这儿出错了.是提示conn,请问我怎么样做法?请\教stmt.setString(1,user_name);中1是不是user_id=? and user_name=?); user_id为1,user_name为2,还是表是.user_id在数据库中的位置??????????????????????????????
错误的提示: Generated servlet error: [javac] Compiling 1 source fileE:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\corpserv\login_005fcheck_jsp.java:79: cannot resolve symbol symbol : method preparedstatement (java.lang.String) location: class ok.conn PreparedStatement stmt=conn.preparedstatement(sql); ^
我怀疑你的conn在bean中没有设置正确,所以提示出错 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); Connection con = java.sql.DriverManager.getConnection(……设置参数); 还有, PreparedStatement pstmt=conn.prepareStatement("select * from t_user where user_id=? and user_name=?"); pstmt.setInt(1,userid);//userid就是传进来的参数 pstmt.setString(2,username);//username就是传进来的参数 ResultSet rst = pstmt.executeQuery(); 的确是应该从1开始计数,是我打错了
我是用javascript的正则表达式来防止非法输入
用了TM的方法:E:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\corpserv\login_005fcheck_jsp.java:79: cannot resolve symbol symbol : method PreparedStatement (java.lang.String) location: class jmeport.conn PreparedStatement stmt=conn.preparedStatement("select * from xx where user_name='"+user_name+"'"); ^出现了这样的错误...无可奈可~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~说conn中有错. 但是我不用这种方法的话.它是没错的.
用预处理语句,可以防止sql注入: PreparedStatement pstmt=conn.prepareStatement(select * from t_user where user_id=? and user_name=?); pstmt.setInt(0,userid);//userid就是传进来的参数 pstmt.setInt(1,username);//username就是传进来的参数 pstmt.executeQuery();楼主照这个格式写就可以了。其实,就是参数化查询。这是实现跨多个数据库编程的一种重要方式。 sigh,只是现在很多人编程用惯了一种数据库。从来不会顾及那些。
我举个例子!比如页面你用的是text输入
<input name="xxx">处理是这样的
String xxx=request.getParameter("xxx");
String sql="select * from t where xxx='" + xxx +"'";
那么这里就有一个严重的问题了当然如果是征程输入就没有问题,比如输入是abc
sql语句变成select * from t where xxx='abc'但是你如果输入一个有趣的东西,结果就不一样了
比如输入 abc' or true --
那么sql语句就变成
select * from t where xxx='abc' or true --'
--之后就被注释掉了
where语句是恒成立的,那么就能看到你这个表俩面所有的数据了!
以后不能直接使用我刚才的办法执行sql语句了要这样
String xxx=request.getParameter("xxx");
PreparedStatement stmt=conn.prepareStatement("select * from t where xxx=?");
stmt.setString(1,xxx);
rs=stmt.executeQuery();
>>ps: 历来在csdn发0分贴然后许诺给分的,绝大部分的承诺都是空的。呵呵!有趣有趣!老大果然是老大!
除非重新写代码
呵呵
自求多福把~
symbol : method PreparedStatement (java.lang.String)
location: class jmeport.conn
PreparedStatement stmt=conn.PreparedStatement("select * from xx where user_name='"+user_name+"'");
^出现了这样的错误...
你先查查api吧,呵呵
PreparedStatement pstmt=conn.prepareStatement(select * from t_user where user_id=? and user_name=?);
pstmt.setInt(0,userid);//userid就是传进来的参数
pstmt.setInt(1,username);//username就是传进来的参数
pstmt.executeQuery();楼主照这个格式写就可以了。
楼主查查api就知道了
<jsp:useBean id="conn" scope="page" class="ok.conn"/> String user_name=request.getParameter("user_name");
String pwd=request.getParameter("pwd");
ResultSet rs;
String sql="select * from xx where user_name=?";
第六行: PreparedStatement stmt=conn.preparedstatement(sql);
stmt.setString(1,user_name);
rs=stmt.executeQuery();现在我这样写的话,它这儿出错了.是提示conn,请问我怎么样做法?请\教stmt.setString(1,user_name);中1是不是user_id=? and user_name=?);
user_id为1,user_name为2,还是表是.user_id在数据库中的位置??????????????????????????????
Generated servlet error:
[javac] Compiling 1 source fileE:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\corpserv\login_005fcheck_jsp.java:79: cannot resolve symbol
symbol : method preparedstatement (java.lang.String)
location: class ok.conn
PreparedStatement stmt=conn.preparedstatement(sql);
^
如原来的
request.getParameter("test");
改为
ParamUtil.getString(request,"test");而在paramUtil的方法getString()中可以做很多事,如replace掉单引号',中是乱码转等,空字符判断等。
import java.sql.*;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Connection con = java.sql.DriverManager.getConnection(……设置参数);
还有,
PreparedStatement pstmt=conn.prepareStatement("select * from t_user where user_id=? and user_name=?");
pstmt.setInt(1,userid);//userid就是传进来的参数
pstmt.setString(2,username);//username就是传进来的参数
ResultSet rst = pstmt.executeQuery();
的确是应该从1开始计数,是我打错了
symbol : method PreparedStatement (java.lang.String)
location: class jmeport.conn
PreparedStatement stmt=conn.preparedStatement("select * from xx where user_name='"+user_name+"'");
^出现了这样的错误...无可奈可~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~说conn中有错.
但是我不用这种方法的话.它是没错的.
连PreparedStatement, import java.sql.* 和 区分大小写 都要人提醒。
回去耕田算啦!你以为编程这么容易啊?!这样也能混饭吃?!
混得一时也混不过一辈!早点转行把职位让出来给其它有能力者吧!
===========================================
你所言甚是.我不是JSP的料.我在公司只要是负责ASP,一般网站的工程.美工.
对于JSP,只是第二次接触.未看过JSP书.配tomcat也只是第二次配,编程是不
易.我没有说过是"易"混饭吃就不敢了.不然我能在这儿混了一年多?而且做
网站只有我一个人.迟下还要用.net来做野.所以什么也是要学.
但在不同情况下.当你快要饿死街头时,你心里想着,是让人授你与渔还是鱼?
===============================================
退位让贤?
哈.上帝你来吧.
我想你asp,jsp,.net不熟.你也别想混得上.
三样都会.这儿你得有几千大元/月.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
请问贵兄在那儿高就?
我只是个低学历的人.
只会一些asp+sql,只做一些中小型网站而已,做下图片,flash.帮人设计vi
做下logo甘样工作.
就什么都不会了.
有待指教.
但我非常爱好编程,我毕业后在某公司工作了一年,
是公司编程人员里的最佳新人。(后来这公司因为业务问题倒闭了)后来随着见识的增长,接触了不少程序员,
我看见很多程序员其实并无真才实学,平时老是在吹自己如何强,
做工程时就从网上抄代码,毫无自己的编程思想。
我觉得这么差的人也能做程序员,与我当初想象的"能者居之"的情形相差甚远!
后来我发现,这是普遍的现状 ... ...----------------------------------------
像你一样,我也是来自广东。(我估计你也是)
如果我的话伤害了,我向你说:对不起!
----------------------------------------
我不是乱吹的,这是我写的一个程序,有空看看。(访问不了就刷几下)一个用Cookie保存的动态javascript树
http://sinmax.home4u.china.com/
PreparedStatement pstmt=conn.prepareStatement(select * from t_user where user_id=? and user_name=?);
pstmt.setInt(0,userid);//userid就是传进来的参数
pstmt.setInt(1,username);//username就是传进来的参数
pstmt.executeQuery();楼主照这个格式写就可以了。其实,就是参数化查询。这是实现跨多个数据库编程的一种重要方式。
sigh,只是现在很多人编程用惯了一种数据库。从来不会顾及那些。
如果多了好几个值就说明有误,前提是判断出一个值时,如果说判断多个值,在议
。
回复人: hesi726(hesi) ( ) 信誉:98 2005-04-19 11:36:00 得分: 0
很明显,你的 conn me 没有 prepareStatement 方法。
那么,另外一个方法就是对传入的参数进行替换
把 ' 替换成 '' 即可以解决你的问题..
那么我没有preparestatement怎么加上去啊/