360鹰眼-更智能的Web安全监控系统

产品描述:

下一代web漏洞扫描器,她是一款硬件,包含:最全面的"爬出"引擎,不再需要收集资产清单,不再需要指定扫描时间,同步发现新上线业务漏洞

适用对象:

企业

价格服务:

目录价19.8万起
我了解,我要试用
高危高危

live800在线交流系统referrerSta.jsp注入

WASC Threat Classification

发现时间:

2016-05-27

漏洞类型:

SQL注入

所属建站程序:

其他

所属服务器类型:

Tomcat

所属编程语言:

Java

描述:

目标存在SQL注入漏洞。

SQL注入攻击是攻击者通过欺骗数据库服务器执行非授权的任意查询过程。

危害:

攻击者利用该漏洞可导致

1.网页被篡改

2.数据被篡改

3. 核心数据被窃取

4. 数据库所在服务器被攻击变成傀儡主机

解决方案:

1.联系厂商升级 http://www.live800.com

2.接入360网站卫士(http://wangzhan.360.cn

3.安装服务器防护软件

4.对程序进行修改:
** 预编译语句:

以下是保护应用程序免遭 SQL 注入(即恶意篡改 SQL 参数)的三种可行方法。使用以下方法,而非动态构建 SQL 语句:

4.1 PreparedStatement,通过预编译并且存储在PreparedStatement 对象池中。 PreparedStatement 定义 setter 方法,以注册与受支持的 JDBC SQL 数据类型兼容的输入参数。例如,setString 应该用于 VARCHAR LONGVARCHAR 类型的输入参数(请参阅 Java API,以获取进一步的详细信息)。通过这种方法来设置输入参数,可防止攻击者通过注入错误字符(如单引号)来操纵 SQL 语句。

如何在 J2EE 中使用 PreparedStatement 的示例:

 

  //J2EE PreparedStatemenet Example

  //Get a connection to the database

 Connection myConnection;

  if(isDataSourceEnabled()) {

     // using the DataSource to get a managed connection

     Context ctx = new InitialContext();

     myConnection =((DataSource)ctx.lookup(datasourceName)).getConnection(dbUserName, dbPassword);

  }else {

     try {

         // using the DriverManager to get a JDBC connection

         Class.forName(jdbcDriverClassPath);

         myConnection = DriverManager.getConnection(jdbcURL, dbUserName,dbPassword);

     } catch (ClassNotFoundException e) {

         ...

     }

  }

  ...

  try{

     PreparedStatement myStatement =myConnection.prepareStatement("select * from users where username =?");

      myStatement.setString(1, userNameField);

     ResultSet rs = myStatement.executeQuery();

     ...

     rs.close();

  }catch (SQLException sqlException) {

     ...

  }finally {

     myStatement.close();

     myConnection.close();

  }

 

 

5.2CallableStatement,扩展PreparedStatement 以执行数据库 SQL 存储过程。该类继承 PreparedStatement 的输入 setter 方法(请参阅上面的 [1])。

以下示例假定已创建该数据库存储过程:

CREATE PROCEDURE select_user (@usernamevarchar(20)) AS SELECT * FROM USERS WHERE USERNAME = @username;

如何在 J2EE 中使用 CallableStatement 以执行以上存储过程的示例:

 

  //J2EE PreparedStatemenet Example

  //Get a connection to the database

 Connection myConnection;

  if(isDataSourceEnabled()) {

     // using the DataSource to get a managed connection

     Context ctx = new InitialContext();

     myConnection =((DataSource)ctx.lookup(datasourceName)).getConnection(dbUserName, dbPassword);

  }else {

     try {

         // using the DriverManager to get a JDBC connection

         Class.forName(jdbcDriverClassPath);

         myConnection = DriverManager.getConnection(jdbcURL, dbUserName,dbPassword);

     } catch (ClassNotFoundException e) {

         ...

     }

  }

  ...

  try{

     PreparedStatement myStatement = myConnection.prepareCall("{?= callselect_user ?,?}");

     myStatement.setString(1, userNameField);

     myStatement.registerOutParameter(1, Types.VARCHAR);

     ResultSet rs = myStatement.executeQuery();

     ...

     rs.close();

  }catch (SQLException sqlException) {

     ...

  }finally {

     myStatement.close();

     myConnection.close();

  }

 

 

4.3实体 Bean,代表持久存储机制中的EJB 业务对象。实体 Bean 有两种类型:bean 管理和容器管理。当使用 bean 管理的持久性时,开发者负责撰写访问数据库的 SQL 代码。当使用容器管理的持久性时,EJB 容器会自动生成 SQL 代码。因此,容器要负责防止恶意尝试篡改生成的 SQL 代码。

如何在 J2EE 中使用实体 Bean 的示例:

  //J2EE EJB Example

  try{

      // lookup the User home interface

     UserHome userHome = (UserHome)context.lookup(User.class);   

     // find the User remote interface

     User = userHome.findByPrimaryKey(new UserKey(userNameField));   

     ...   

  }catch (Exception e) {

      ...

  }

参考资料http://java.sun.com/j2se/1.4.1/docs/api/java/sql/PreparedStatement.html http://java.sun.com/j2se/1.4.1/docs/api/java/sql/CallableStatement.html



SQL 注入漏洞演示

如果你的网站服务器是Windows系统,建议使用"主机卫士"修复漏洞,点击下载
对该漏洞进行评论