SQL注入
如何在JSP中写代码防止SQL注入
过滤输入数据 发现可疑字符活着字符串 替换成"" 或者抛出异常
直接修改sql语句不行么
使用占位符
对sql语句用此对象 PreparedStatement 操作,然后传参 。
PreparedStatement pt = conn.prepareStatement("select * table from where id = ?");
pt.setInt(1,a_id);
防注入的最有效,最简单的方法是
使用预编译的PreparedStatement
而不是使用拼凑SQL的 Statement
比如判断用户名和密码的例子,应该用
Java code:
/**
* 一段防止SQL注入的使用预编译的PreparedStatement的代码例子
*
* @param username 用户名
* @param password 密码
* @return 成功返回true,否则返回false
*/
public static boolean checkLogin(String username, String password) {
Connection con = null;// 数据库连接部分我就不写了
PreparedStatement stat = null;
ResultSet rs = null;
try {
// 预编译语句
stat = con.prepareStatement("select count(*) from t_user where username=? and password=?");
// 设置2个参数
stat.setString(1, username);
stat.setString(2, password);
// 执行
rs = stat.executeQuery();
if (rs.next()) {
return rs.getInt(1) > 0;
}
return false;
} catch (Exception ex) {
ex.printSta
相关问答:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jas ......
有2个表啊:
表名:yh
用户编码 用户名称
001 a
002 b
003 c
表名:ys
用户编码 本期指数 抄表时间
001 ......
场景如下:
客户把备份好的数据库,发给我,我在本机还原后,运行写好的存储过程,比较快,并且在实施那边运行同样比较快。但是当实施在客户那边运行的时候速度就非常的慢,时间超出了程序的时间限制。远程在客户那 ......
需求如下:
a表:
p_id status
1 0
2 0
b表
rec_id pid purchase_qty receive_qty flag
1 1 10 10 0
2 ......
一个很奇怪的问题
SQL code
select * from Gprs_DataInof
--可以查到所有的数据
select * from Gprs_DataInof where DataTime between 1900-10-16 1:01:00' and '2009-10-20 1:01:00'
--一条数据 ......