总结之前端安全篇
文章目录
一、XSS攻击
1、什么是XSS攻击
XSS攻击(跨站点脚本攻击),就是黑客恶意篡改你网页的前端代码,在里面注入一些恶意的 html+javascript的脚本,并在你的浏览器内运行,获取你的信息,或者进行一些恶意操作。
2、XSS攻击的两种方式
反射型攻击
黑客在钓鱼网站设置其URL链接,URL链接可为色情动图、诱惑小视频,此URL链接内嵌有其恶意脚本,你点后 ,恶意脚本被返回至你的浏览器里。此时脚本就会运行,一旦控制了浏览器可得到大量东西,浏览器内包含cookie,可利用cookie伪造你的用户登录的session 状态,去以你这个用户的名义干一些事儿。
持久性攻击
持久型攻击,论坛、社交网站之类的系统,可发布一些帖子,评论。黑客可在里面写一段恶意脚本, 然后把恶意脚本混杂在评论内容里提交到网站的数据库里去 。然后其他用户在社交网站里浏览到了黑客的这个评论,评论内容会被返回到其浏览器里去,此时评论内容是包含恶意js脚本的,马上恶意脚本运行,可利用cookie伪造你的用户登录的session 状态,去以你这个用户的名义干一些事儿。
3、如何防止XSS攻击
-
包含恶意URL链接的图片、视频、动图、flash动画,少点,尽量使用正规的网站 ;
-
消毒机制,代码里必须对内容进行消毒,就是进行一些转义,比 如说把>转义为>之类的,这样就可以把恶意脚本里的html标签、js代码之类的东西,都给转义掉,让这些恶意脚本失效 -> ,这种东西在浏览器里是不会运行的 这样的话,转义以后的脚本被其他用户看到的时候也不会在浏览器里运行了;
-
HttpOnly方式,这个意思是说如果你在浏览器里存放cookie的时候,可以设置一个HttpOnly属性,比如说存放用户加密认证信息的 cookie,这样的话,在浏览器里运行的js脚本是被禁止访问这些HttpOnly cookie的,他就无法窃取你在浏览器里存储的cookie了。
4、XSS攻击要做什么坏事
- 窃取cookie,然后借刀杀人,借用户的身份伪造数据请求;
- 劫持流量,后导流到他的私域网站上去;
- 插入广告;
- 置入木马;
- 获取用户信息;
5、预防xss攻击方法

二、CSRF攻击
1、什么是CSRF攻击
CSRF,即 Cross Site Request Forgery,是指跨站请求伪造,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。
与XSS不同,XSS攻击是向受攻击网站进行脚本注入攻击,而CSRF攻击是其他网站对受攻击网站进行伪造请求。
2、CSRF攻击方式
CSRF 攻击是借助被攻击者的 Cookie 骗取服务器的信任,以被攻击者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。
示例
银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
危险网站B,它里面有一段HTML的代码如下:
< img src =http://www.mybank.com/Transfer.php?toBankId=11&money=1000 >
首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块…
为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作…
3、如何防御CSRF?
验证码
由于CSRF攻击伪造请求不会经过受攻击的网站,所以我们可以在网站加入验证码,这样必须通过验证码之后才能进行请求,有效的遏制了CSRF请求。
但是,这种方式不是万能的,并不是每个请求都加验证码,那样用户体验会非常不好,只能在部分请求添加,作为一种辅助的防御手段。
验证Referer
在HTTP协议中,头部有个Referer字段,他记录了该HTTP请求的来源地址,在服务端设置该字段的检验,通过检查该字段,就可以知道该请求是否合法。
cookie设置sameSite
cookies设置sameSite属性的值为strict,这样只有同源网站的请求才会带上cookie。这样cookies就不能被其他域名网站使用,达到了防御的目的。
添加token验证
这是一种相对成熟的解决方案。要抵御 CSRF,关键在于在请求中放入攻击者所不能伪造的信息,并且该信息不存在于 Cookie 之中。在服务端随机生成token,在 HTTP 请求中以参数的形式加入这个 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
token会保存在服务端session中,同时保存到客户端中。在客户端中通常存储在LocalStorage中,在Vue框架中,我们还可以将token存放在Vuex的state中。
三、SQL注入
1、什么是SQL注入
SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。
就是访问用户通过网站前端对网站可以输入参数的地方进行提交参数,参数里插入了一些恶意参数传入到服务器后端里去,服务器后端并没有对其进行详细的安全过滤,导致直接进入到数据库里,执行了数据库的sql语句,sql语句可以是查询网站的管理员账号,密码,查询数据库的地址等等的敏感信息,这个就是sql注入攻击。
示例
某学长通过攻击学校数据库修改自己成绩,一般用的就是SQL注入方法。
2、原因总结
对sql语句和关键字未进行过滤
当前端传过来的数据进入到后端进行处理时,没做严格的判断,导致其传入的‘数据(含有sql关键字)’ 在拼接sql语句中
由于其特殊性,被当作sql语句的一部分被执行,导致数据库受损(修改,删除等)
3、防止方法
-
过滤掉关键字:select、insert、update、delete、and等;
-
执行 sql语句时使用系统函数addslashes进行 sql语句转换
-
提高数据库命名技巧,对于一些重要字段根据程序特点命名,取不易猜到的(lcuuid as uuid)
-
对于常用的方法加以封装,避免直接暴露sql语句,例如 orm
-
开启安全模式,safe_mode=on
-
打开magic_quotes_gpc=off,默认是关闭的,它打开后自动把用户提交的sql语句进行转换(加上\转义),这对防止sql注入有很大作用;on
-
Sql语句书写尽量不要省略双引号和单引号
-
关键日志错误信息不要暴漏到页面,转到系统中去