web前端方面存在哪些安全问题,这些问题的原理是什么?如何解决这些问题?

参考链接:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

https://www.cnblogs.com/fengsiyi/p/7337450.html

常见的几种web前端安全问题有:XSS(跨站脚本攻击)、CSRF(跨站请求伪造)、SQL注入等。

1.XSS(跨站脚本攻击)(cross-site scripting)

它一般有三种类型:

第一种:反射型XSS
  这种xss,跨站代码一般存在于某一个链接中,当呗攻击者访问这样的连接时,跨站代码就被执行,这类跨站代码一般不会存储在服务器上面

攻击原理:通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。

第二种:存储型XSS
        这种xss用起来比较方便,跨站代码会存储在服务器上面数据库中,换句话就是可以持久的进行攻击,亦称持久型XSS

攻击原理:XSS代码被提交给网站-->网站把XSS代码存储进数据库—>当该页面再次被请求时,服务器发送已经被植入XSS代码的数据给客户端—>客户端执行XSS代码

第三种:基于DOM的XSS
       这是由于客户端脚本自身的解析不正确导致的安全问题

攻击原理:源于DOM相关的属性和方法(url、src等),被插入用于XSS攻击的脚本。

XSS攻击是Web攻击中最常见的攻击方法之一,原理是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼。

防御XSS的手段:

概括:防范的方法就是,不信任任何用户的输入,对每个用户的输入都做严格检查,过滤,在输出的时候,对某些特殊字符进行转义,替换等。

1)HttpOnly。现在HTTP协议(HTTPS也是可以的)才能读取cookies,JavaScript是读取(注意是读取,不是操作)不到cookies的。这本质上不是预防XSS,而是在被攻破时候不允许JS读取Cookie。

2)过滤用户输入。检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。服务端也要严格控制输出。

3)处理富文本。处理的过程是在服务端配置富文本标签和属性的白名单,不允许出现其他标签或属性(例如script、iframe、form等),即”XSS Filter“。

 

2.CSRF(跨站请求伪造)

CSRF实现原理详细过程和图示:

1、用户C打开浏览器,访问网站A,输入用户名和密码请求登录网站A;

2、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

3、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

4、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问站点A;

5、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF攻击是源于WEB的隐式身份验证机制!WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的!

一般在(4)处恶意网站(B)的攻击手段如下(必须是指向A的地址,否则无法带上cookie):

 1.譬如在网站内的图片资源中潜入恶意的转账操作 

 2.构建恶意的隐藏表单,并通过脚本提交恶意请求 

 而且,从头到尾,攻击网站都没有获取到过 cookie,都是通过浏览器间接实现(利用Web的cookie隐式身份验证机制),所以HttpOnly并不会影响这个攻击。

web前端方面存在哪些安全问题,这些问题的原理是什么?如何解决这些问题?_第1张图片

几种常见防御CSRF的手段:

1. 验证HTTP Referer字段(非常简单,但是鉴于客户端并不可信任,所以并不是很安全)

(防止CSRF,检查Referer字段简单直接,但是其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。)

2. 在请求地址中添加token并验证

(譬如post中,以参数的形式加入一个随机产生的token)

3. 验证码(图片验证码和短信验证码)

4. 对特殊参数(比如增加的伪随机数)进行加密

 

3.SQL注入

SQL注入的原理(步骤):

(1)确定网站是否存在注入点,若存在,找到SQL注入位置

(2)判断服务器类型和后台数据库类型

(3)针对不通的服务器和数据库特点(猜测表名和列名)进行SQL注入攻击

防御SQL注入手段:

1)PreparedStatement(简单有效)

采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。

使用好处:

(1).代码的可读性和可维护性.

(2).PreparedStatement尽最大可能提高性能.

(3).最重要的一点是极大地提高了安全性.

原理:

sql注入只对sql语句的准备(编译)过程有破坏作用

而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,

而不再对sql语句进行解析,准备,因此也就避免了sql注入问题. 

2)使用正则表达式过滤传入的参数(包括字符串过滤)

你可能感兴趣的:(http,协议)