所谓SQL注入,是将恶意SQL命令通过某种方式提交到服务器后台,并欺骗服务器执行这些恶意的SQL命令的一种攻击方式。 —— [ 百度百科 ]
造成SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。
对输入进行过滤;
使用预编译的SQL语句,比如Java中的PreparedStatement;
使用存储过程(不是所有场景都使用,这个方法不是很推荐);
MyBatis的SQL注入防护—模糊查询
-- MySQL select * from table where name like concat('%',#{name},'%') -- Oracle select * from table where name like '%' || #{name} || '%' -- SQL Server select * from table where name like '%'+#{name}+'%' -- DB2 select * from table where name like concat('%',#{name},'%') SQL注入相关的优秀博客https://blog.csdn.net/wutianxu123/article/details/82718718
https://blog.csdn.net/wutianxu123/article/details/82719212
XML注入 什么是XML注入XML的设计宗旨是传输数据,而非显示数据。XML注入是一种古老的技术,通过利用闭合标签改写XML文件实现的。
下面举个最简单的例子
<?xml version="1.0" encoding="utf-8"?> <USER> <user Account="admin">用户输入</user> <user Account="root">root</user> </USER>若攻击者刚好能掌控用户输入字段,输入 adminhacker ,最终修改结果为:
<?xml version="1.0" encoding="utf-8" ?> <USER> <user Account="admin">admin</user> <user Account="hacker">hacker</user> <user Account="root">root</user> </USER>这样我们可以通过XML注入添加一个管理员账户。
预防XML注入对有改变XML结构的特殊输入进行过滤或者编码;
对["&","<",">","'".'"',"http://www.likecs.com/"]这些特殊字符过滤。
JSON注入 什么是JSON注入我们知道JSON是根据引号(")、冒号(:)、逗号(,)和花括号({})区分各字符的意义的。如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败。例如,输入的PassWord值为:admin"888
那么组装成的JSON数据位如下:
在PassWord中的引号将会破坏整个JSON的结构,导致JSON解析失败。JSON注入没有其他几种注入的危害性大,但依然不可小视,笔者一直认为没有低危的漏洞,只是还没碰到可利用的场景,攻击者可能通过这类低危漏洞辅助其他攻击,这时低危漏洞将不再低危。
JSON注入的防御如何防御JSON注射呢?方法依然很简单,只需要对其关键字符进行转义即可,如:将"admin"888"转换为"admin"888",这样JSON的值就可以解析了。如果字符串中出现"",同样需要将其转义"\"。
CRLF注入我们知道:一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。请求报文格式就如下图所示:
参考博客
我们可以发现请求行和请求头的尾部都有CRLF标志,请求头和请求体之间也是通过CRLF标志分割的。CRLF注入漏洞就是利用Http的这种报文结构,向请求行或请求头的字段注入恶意的CRLF,就能注入一些首部字段或报文主体(请求响应数据),并在响应中输出,所以CRLF又称为HTTP响应拆分漏洞(HTTP Response Splitting)。
CRLF介绍CRLF指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII 10,\n,%0a)。CRLF的概念最早源自打字机,表明行的结束,计算机出现后沿用了这个概念。