首页 > 编程语言 >javaweb审计/函数

javaweb审计/函数

时间:2023-03-13 12:34:45浏览次数:40  
标签:审计 javaweb user sql 注入 where id select 函数

statement.executeQuery(sql);

lombok模块可以自动生成setter/getter/tostring等方法

SQL注入

可以首先找到所有包含sql语句的点,随后观察传参类型是否是sring类型,只有当传参类型时string类型时我们才可能进行sql注入

2.PrepareStatement预编译后的 seletc * from user order by id中 id会自动添加单引号--> select * from user order by 'id'

statement执行sql语句

是java JDBC 中原生的执行方式 如果没有经过过滤会造成sql注入

String sql = "select * from user where id =" +id;

ps = conn.createStatement();

rs= ps.executeQuery(sql);

%和_模糊查询

由于java预编译查询中不会对%和_进行转义处理,他们刚好是like查询的通配符,如果没有做好过滤,导致恶意模糊查询 占用服务器性能,耗尽资源造成宕机

select * from user where username like '%user%'

orderby 注入

order by 子句后米娜需要添加字段名或者字段位置,而字段名是不能带引号的,否则会被认为是一个字符串而不是字段名 

1.preparastatement是使用占位符传入参数的,传递的字符会有单引号包裹

2.所以order by只能使用字符串拼接的方式 但是也也有可能造成sql注入

所以要对关键字符串过滤

mybatis注入

1.${} #{}区别

#{}在底层实现用了"?"作为占位符生成preparesatement,也是参数化查询预编译机制

${} 将传入的数据直接显示成成在sql语句中,类似于字符串拼接,可以会出现sql注入的风险

SELECT * FROM user where id =#{id} safe 写法

select * from user where id =${id} 不安全的写法 直接拼接

 

2.order by 查询 

order by 的#{} ${} 使用不当

orderby是只能进行字符拼接的方式而不能进行参数化查询  #{} 这个是参数化

orderby的字符拼接 ${} 但是也有可能造成sql注入

 

3.like查询 

mybatis 的like自居使用#{} 程序会报错 例如:select * from users where name like '%#{user}%' 只能使用${},但是使用${}可能会造成sql注入

select * from users where name like '%${user}%'

4.in注入

in使用参数化查询的时候会将select * from users where name in (#{user}) 转变为 select * from users where name like ("user1','user2','user3','user")

所以只能用$(进行查询

要在mybatis框架中使用userMapper.xml定义映射文件中设置

<mapper namespace= "com.mybatis_orderby.userMapper">

<select id="getUser" resultType="com.mybatis_orderby.sql.User">

  select * from users where name in (${user})

</select)
</mapper>

sql注入漏洞修复

sql注入漏洞最有效的防御手段便是进行预编译处理,.

为什么这样处理就能预防SQL注入提高安全性呢?其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1’也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了防御SQL注入的作用了!

 

标签:审计,javaweb,user,sql,注入,where,id,select,函数
From: https://www.cnblogs.com/lisenMiller/p/17210934.html

相关文章

  • JavaScript回调函数
    JavaScriptAPI里这样解释:Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteritsparentfunctionhascompleted.(回调......
  • python函数
    函数:是组织好的,可重复使用的,用来实现特定功能的代码段。函数的定义:def函数名(传入参数):函数体return返回值 函数的调用:函数名(参数)注意事项:参数不......
  • mysql elt interval函数区间统计
    引言 在实际的业务统计需求中有时往往需要对区间进行分组统计查询,如分数区间,工资区间查询统计等!mysql中可以利用elt函数来实现此类需求!接下来看如下时间业务需求:......
  • 函数柯里化和new操作符的实现
    函数柯里化柯里化在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数......
  • 字符串函数练习
    字符串函数练习一:下列程序会打印什么#include<stdio.h>intmain(void){charnote[]="Seeyouatthesnackbar.";char*ptr;ptr=note;put......
  • 部分字符串函数的自定义实现
    strlen(),strcpy(),strcmp(),strcat(),strstr()等字符串函数是我们经常遇见的字符串函数,这篇文章,就让我们来尝试自定义实现这些函数。一、首先是strlen()函数,strlen()函数是......
  • JavaScript异步编程的深入理解,使用回调函数实现异步编程
    异步编程是指在程序运行时,任务不会按照函数调用的顺序依次执行,而是可以同时执行多个任务。JavaScript异步编程有很多种方式,例如使用回调函数、Promise、async/await等。下面......
  • Oracle相关的函数
    1:时间相关 时间的变化。selectsysdate+1fromdual; //表示当前的时间加1天。selectsysdate+1/24fromdual//加1个小时selectsysdate+1/24/60fromdual;加......
  • 函数
    函数的基本使用:无参函数:就是函数没有参数的函数。有参函数:函数内可以传值的函数。位置参数:函数的参数和调用的值一一对应的就是位置函数。关键字参数:以变量名=变量值的......
  • 手写上下文函数
     bind返回一个新函数,但不执行绑定this和部分参数如是箭头函数,无法改变this,只能改变参数Function.prototype.customBind=function(context,...bindArgs){......