SQL注入——【牛腩新闻发布系统】

Sql Inject概念:

  百度解释:通过SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器质性恶意的SQL命令。

  SQL注入攻击指的是通过构件特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

  SQL注入分为两种:平台注入、代码注入。


实例:

 

  牛腩新闻发布系统 数据库 新闻类别表

SQL注入——【牛腩新闻发布系统】_第1张图片

 

  查询Id=1的新闻类别

SQL注入——【牛腩新闻发布系统】_第2张图片


嵌入恶意表达式1=1使where失去作用,恒真后,查询出来的数据是所有的新闻类别名称。

SQL注入——【牛腩新闻发布系统】_第3张图片

 

教训:

1.      永远不要信任用户的输入(正则表达式验证)。

2.      永远不要使用动态拼装sql,可以使用参数化sql或者直接使用存储过程进行数据查询存取(我们常用的)。

3.      永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.      不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.      应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对元素错误信息进行包装。

6.      SQL注入采取辅助软件或网站平台来检测。


SQL注入代码(Java)——2015年12月12日

/**	
	 * 用户登录 演示sql注入
	 * 用户名称:sdfsdfdsf 
	 * 用户密码 'or '1'='1
	 * SQL语句:select * from t_user where user_id='sdfsdfdsf'and password=''or '1'='1'
	 * @param userId 用户id 
	 * @param password 用户密码 'or '1'='1
	 * @return
	 */
	public boolean login(String userId,String password){
		String sql="select * from t_user where user_id='" +userId +"'and password='"+password +"'";
		System.out.println(sql);
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		boolean success=false;
		try {
			conn=DbUtil.getConnection();
			pstmt=conn.prepareStatement(sql);
			rs=pstmt.executeQuery();
			if(rs.next()){
				success=true;
				System.out.println("用户和密码正确!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
			DbUtil.close(rs);
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		}
		return success;
	}
	





你可能感兴趣的:(正则表达式,sql注入,新闻,Web应用,发布)