当前位置: 首页 > news >正文

公司商城网站建设方案北京网站制建设公司

公司商城网站建设方案,北京网站制建设公司,网站整站优化推广方案,做维修家具广告在哪个网站好1 原理 没有正确的对用户的输入进行检查,将用户的输入以拼接的方式带入到SQL语句中,导致SQL注入。 2 产生SQL注入的原因 2.1 JDBC拼接不当造成SQL注入 前置知识: JDBC执行SQL语句的两种方式: PrepareStatement:会对…

1 原理

没有正确的对用户的输入进行检查,将用户的输入以拼接的方式带入到SQL语句中,导致SQL注入。

2 产生SQL注入的原因

2.1 JDBC拼接不当造成SQL注入

前置知识:

  1. JDBC执行SQL语句的两种方式:
  • PrepareStatement:会对sql语句进行预编译,效率和安全性更好。支持使用对变量位进行占位。
  • Statement:每次执行时都需要编译
  • 典型的错误拼接方式:

    String sql="select * from user where id=" + req.getParameter("id");
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(sql);
    
  • 正确的拼接方式:使用占位符

    String sql="select * from user where id=?";
    PreparedStatement pstt = con.PreparedStatement(sql);
    pstt.setInt(1,Integer.parseInt(req.getParameter("id")));
    ResultSet rs = pstt.executeQuery();
    
  • 防御:使用PreparedStatement,且不要把用户输入的东西拼到SQL语句里。

2.2 框架使用不当造成sql注入

① MyBatis框架

SQL传参的两种方式:#{parameter}${parameter}

  • 思想:将SQL语句编入到配置文件中,避免SQL语句在Java程序中大量出现,方便后续对SQL语句的修改与配置。

  • #$的区别

    • #{}:可以试用进行预编译,安全,推荐使用。

      eg:如下代码

      <select id="getUsername" resultType="com.zlong.bean.User">select id,name,age from user where name = #{name}
      </select>
      

      其中将#{name}先使用占位进行预编译,然后再传参,不存在sql注入的问题。

    • ${}:直接拼接到语句中,不安全

      eg:如下代码

      <select id="getUsername" resultType="com.zlong.bean.User">select id,name,age from user where name = ${name}
      </select>
      

      该代码直接将用户的值拼接到sql语句中,可以触发恶意的代码。

② Hibernate框架

Hibernate框架是持久性API,因此是对持久化类的对象进行操作,而不是直接对数据库,语句由Hibernate进行解析。它是将JAVA类映射到数据库表中,从JAVA数据类型映射到SQL数据类型。直接拼接可能会导致注入漏洞。

  1. 使用以下HQL参数绑定的方法(预编译)避免注入漏洞
  • 位置参数

    String parameter = "z1ng";
    Query<User> query = session.createQuery("from com.z1ng.bean.User where name = ?1",User.class);
    query.setParameter(1,parameter);
    
  • 命名参数

    String parameter = "z1ng";
    Query<User> query = session.createQuery("from com.z1ng.bean.User where name = :name",User.class);
    query.setParameter("name",parameter);
    
  • 命名参数列表

    List<string> names = Arrays.asList("z1ng","z2ng");
    Query<User> query = session.createQuery("from com.z1ng.bean.User where names in (:names)",User.class);
    query.setParameter("names",names);
    
  • 类实例(Bean)

    user1.setName("z1ng");
    Query<User> query = session.createQuery("from com.z1ng.bean.User where name = :name",User.class);
    query.properties(user1);
    
  1. 参数绑定的方法构造SQL语句(Hibernate支持原生SQL语句执行)
  • 正确的参数绑定方法

    Query<User> query = session.createNativeQuery("select * from user where name = :name");
    query.setParameter("name",parameter);
    
  • 错误的拼接方法

    Query<User> query = session.createNativeQuery("select * from user where name = '"+parameter="'");
    

2.3 防御不当造成SQL注入

预防SQL注入漏洞一般正确使用预编译就可以,但是存在特殊情况不可以使用预编译:sql注入的order by后的参数赋值就不能使用预编译进行防止SQL注入。故除预编译之外,需要对用户的输入进行严格的过滤,包括参数类型,参数格式。

http://www.yayakq.cn/news/484174/

相关文章:

  • 如何建三网合一网站做网站的的报价
  • 哈尔滨网站开发wordpress怎么修改数据库密码
  • 现在做个企业网站一般多少钱网络域名地址
  • 手机wap网站免费建站wordpress首页突然丢失
  • 建设部网站 法规连云港网站建设价位
  • 免费域名注册服务网站个人网站建设网站
  • 西安企业门户网站建设东莞市建设厅官方网站
  • 安徽优化网站电子商务网站建设的方法和工具
  • 邢台做网站公司网站建设的基本流程包括什么
  • 以下工具属于网站设计工具的是建立网站有哪些步骤
  • 杭州萧山网站建设大学生个人网站制作
  • 常州网站建设平台wordpress 登录后页面空白
  • 辅导班广告去哪个网站做网站设计 尺寸
  • 浏览小城镇建设的网站渠道网络股份有限公司
  • 企业开发网站建设河南省住房城乡建设厅网站首页
  • 怎么用ngrok做网站郑州网站优化网络建设有限公司
  • 温州建设集团网站首页黄页网络的推广网站有哪些类型
  • 绍兴高端网站开发网站建设合同 果动.l
  • 电影网站app怎么做百度验证网站
  • 天津制作企业网站报价企业网站怎么搜索优化
  • 怎么免费建立公司网站网页设计工具一般有哪几种
  • 珠海酒店网站建设免费自己做网站
  • 苏州网站设计聚尚网络程序员必知的网站
  • 网站建设框架文档wordpress极简名片主题
  • 企信网企业信用信息系统黑龙江百家号seo
  • 网站班级文化建设视频wordpress打字烟花
  • 漳州网站建设优化推广1万网站建设费入什么科目
  • 网站建设 采集重庆seo案例
  • 谁在万网建设的网站创可贴在线设计平台
  • 网站建设工作职责专做定制型网站