常见漏洞原理及其防御方法

SQL注入

SQL原理

SQL注入是因为在用户输入查询时,后台代码没有对用户输入的内容进行过滤,并且将用户的语句代入数据库查询,执行代码,恶意攻击者就可以构建任意代码进行攻击。

  • SQL注入本质是数据和代码没有分离

防御方法

1. 预编译

#{}这种方式SQL语句是经过预编译的,它是把#{}中间的参数转义成字符串

预编译防御的原理

采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好
也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入
的是什么,都不会影响该sql语句的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,
比如 "select ,from ,where ,and, or ,order by" 等等。所以即使你后面输入了这些sql命令,
也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,
既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,
只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。

2. 字符串过滤

进行严格的字符串过滤

public static boolean sql_inj(String str){

String inj_str = "'|and|exec|insert|select|delete|update|

count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";

String inj_stra[] = split(inj_str,"|");

for (int i=0 ; i < inj_stra.length ; i++ ){

if (str.indexOf(inj_stra[i])>=0){

return true;

}

}

return false;

}

3. 将数据和代码严格分离

数据代码严格分离其实是打破“攻击者可控”的一种手段
不让攻击者控制代码,换一个朴素的说法就是让攻击者构造的恶意代码不能传入后端执行。比如:

后端代码中使用的是单引号闭合,那么我们要做到就是在用户输入的东西全部都在单引号内,不让其闭合,那么就可以将单引号转义,将用户输入的单引号转义成为一个斜杠,这样就无法闭合了(在代码中用什么闭合就将什么符号进行转义即可)

XSS

原理

XSS又叫CSS (Cross Site Script)
跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。xss是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户
xss漏洞可以用来进行钓鱼攻击,前端js挖矿,用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制

主要类型:反射型和存储型
储存型:最直接的危害类型,跨站代码存储在服务器(数据库)。
反射型:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。

防护措施

1 当恶意代码值被作为某一标签的内容显示:转义字符,比如(" <>&等等)将其转化为不被浏览器解释执行的字符

2 对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。

3 对输出的内容进行过滤,针对网站需要输出的html内容用进行关键字过滤。

4 cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等;通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。

CSRF 跨站请求伪造

CSRF与XSS的区别:CSRF是利用B网站攻击A网站,XSS(反射型)是将A网站的Cookie发到B网站
CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

原理

攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one
click"攻击

防御方法

–对敏感信息的操作增加安全的token;
–对敏感信息的操作增加安全的验证码;
–对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等

文件上传

原理

文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。

文件上传漏洞须同时满足文件的上传和文件的解析
一句话木马: 例如

防御方法

按照文件上传漏洞的原理,可以从两个方面去防御

1.文件上传:文件上传过程中使用一些黑白名单绕过,绕过JS过滤等,这时候就需要在后端进行更严格的过滤,前端的过滤最好不要使用。上传只是限制了上传的一些路径方法而已,无法做到绝对的不能上传一些非法文件。
2.文件解析:在文件上传之后,需要解析执行文件,才能进一步入侵,所以阻止上传的文件执行,文件上传目录设置为不可执行,将文件统一重命名等。

SSRF服务端请求伪造

原理

由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制

比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。即也就是说服务器端的验证并没有对其请求如获取图片的参数(image=)做出严格的过滤以及限制,从而导致A网站可以从其他服务器的获取数据

防御方法

限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
限制不能访问内网的IP,以防止对内网进行攻击
屏蔽返回的详细信息

你可能感兴趣的:(web,sql,数据库,database,网络安全)