关于Web安全,我们最早听到最多的就是SQL注入。例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库。如果在输入时进行了恶意的SQL拼装,那么最后生成的SQL就有问题,黑客就可以从数据库中拖出关键信息。

我们可以通过在后端用PDO扩展的方式访问数据库和对用户输入数据进行多重验证的方式来避免SQL注入。本文先不做重点来讨论。

而现在前端我们遇到的web安全问题比较典型的有XSS攻击和CSRF攻击这两种。本次主要来说说对于这两种攻击,先解释其实现原理还有我们都有哪些方法可以来应对。

一、XSS(Cross-site Scripting, 跨站脚本攻击)

 避免与CSS重名,所以简写成XSS了。原理就是通过发布文章、发布评论等方式,将一段恶意的JS代码输入进去。然后别人再看这篇文章、评论时,之前注入的这段恶意JS代码就执行了。JS代码一旦执行就跟网页原有的JS有同样的权限,可以获取cookie等。

解决办法有四个:

1.CSP(Content-Security-Policy)

  内容安全策略是http协议中协议头的一个字段,也可以通过html的meta标签进行控制。只要在返回的http头中定义:

'Content-type':'text/html',
'Content-Security-Policy':'default-src http: https:'
  那么返回的html文件就只能通过http和https外链加载js脚本的方式来执行js代码,而不能执行内联的js代码。这样就防止了恶意内联js代码的执行。此外这个标签还可以设置加载哪些域名下的js文件等,更多信息请查阅 MDN CSP文档

2.对cookie设置http-only

可以对cookie设置http-only来禁止通过JS访问cookie,减少XSS攻击。

3.对用户输入的内容进行escape验证

目前已经有一些npm库例如xss-escape,通过把有XSS攻击危险的字符转换成html实体字符,再放到后端存储,下次在前端渲染的时候,浏览器就不会把实体字符当做脚本来执行了,而是当成实体编码解码之后进行显示。

4.后端对有XSS嫌疑的内容进行过滤

  目前已经有一些npm库例如xss-escape,通过把有XSS攻击危险的字符转换成html实体字符,再放到后端存储,下次在web前端渲染的时候,浏览器就不会把实体字符当做脚本来执行了,而是当成实体编码解码之后进行显示。

二、CSRF(Cross-site request forgery,跨站请求伪造)

 CSRF是借用了当前操作者的身份来偷偷完成了某个请求操作,而不是为了拿到用户信息。所以这两种攻击都是以Cross-site开始,可以一起来记忆。其原理是利用了浏览器再访问某个特定域名时会一直带着这个域名的cookie,那么如果用户访问了某个不安全的网站,网页中有一段js命令执行了一个第三方网站的请求,如果用户之前登录过这个第三方网站的话,黑客就可以利用用户的身份来请求这个第三方网站,完成一些私密的操作。

所以当前在涉及现金交易是都是需要输入密码或者指纹验证,防止第三方伪造请求。

敏感的接口使用POST请求而不是GET请求也能够一定程度预防CSRF。

还有就是对cookie设置same-site属性,规定浏览器不能在跨域请求中携带Cookie,来减少CSRF攻击。

Web安全常见问题及解决方法的更多相关文章

  1. NHibernate常见问题及解决方法

    NHibernate常见问题及解决方法 曾经学过NHibernate的,但是自从工作到现在快一年了却从未用到过,近来要巩固一下却发现忘记了许多,一个"in expected: <end ...

  2. C#用ado.net访问EXCEL的常见问题及解决方法

    C#用ado.net访问EXCEL的常见问题及解决方法,除了像sql server,access常见的数据库,其实Excel文件也可以做为数据库访问. ado.net访问excel的实例: OleDb ...

  3. Nacos 常见问题及解决方法

    Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈.在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方法,这篇文章后续 ...

  4. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

    使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为使用 ASP.NET 4.0,按 F1 可了 ...

  5. 安装scrapy框架的常见问题及其解决方法

    下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...

  6. python&django 常见问题及解决方法

    0.python-dev安装(ubuntu) apt-get install  python-dev 1.Open(filename,mode) 报错实例: f = open('d:\Users\16 ...

  7. IIS_常见问题及解决方法

    配置错误 在唯一密钥属性“value”设置为“default.aspx”时,无法添加类型为“add”的重复集合项 配置文件 \\*******\web\web.config web.config中 & ...

  8. AppFuse 3常见问题与解决方法

    非常长一段时间没做SSH项目了.近期抽出时间看了一下升级到3.x的appfuse,对新版本号使用过程中出现的一些问题进行了排查.汇总例如以下.以备后用.本文原文出处: http://blog.csdn ...

  9. python网络爬虫(1)——安装scrapy框架的常见问题及其解决方法

    Scrapy是为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板. 其实在Linux和 Mac安装,就简单的pip命令即可: pip i ...

随机推荐

  1. iOS沙盒目录简介、沙盒路径获取

    一.沙盒的意义 出于安全的考虑,iOS系统的沙盒机制规定每个应用只能访问当前沙盒目录下面的文件.但是对于一些用户级别的数据,考虑到很多软件都需要使用其中的数据,用户可以通过对当前的软件授权,让当前的应 ...

  2. 吴裕雄--天生自然HADOOP操作实验学习笔记:pig简介

    实验目的 了解pig的该概念和原理 了解pig的思想和用途 了解pig与hadoop的关系 实验原理 1.Pig 相比Java的MapReduce API,Pig为大型数据集的处理提供了更高层次的抽象 ...

  3. C 语言入门---第六章 C语言数组

    数组就是一些列具有相同类型的数据的集合,这些数据在内存中一次挨着存放,彼此之间没有缝隙. 我们可以将二维数组看作一个Excel表格,有行有列,length1 表示行数,length2 表示列数,要在二 ...

  4. S7-300 与TP900 组态 棒图 量表 滚动条 滚动条设置的值通过IO输出域显示出来

    切换编程语言 注意 一定要 先选中 某一个组织块 例如 OB1 然后单击 菜单 编辑 切换编程语言 组态 300 PLC 的CPU 点击 SIMENSE LOGO 查看 循环 中断 OB35 可以 在 ...

  5. SpringBoot集成百度UEditor图片上传后直接访问404解决办法

    SpringBoot项目上传图片一般是上传至远程服务器存储,开发过程中可能会上传至当前项目的某个静态目录中,此时就会遇到这个问题,文件在上传之后直接访问并不能被访问到,必须重新加载项目. 首先分析一下 ...

  6. php-计算2个时间之差

    //$startdate是开始时间,$enddate是结束时间 <?php $startdate="2011-3-15 11:50:00"; $enddate="2 ...

  7. python笔记12

    day12 今日内容 函数中高级(闭包/高阶函数) 内置函数 内置模块(.py文件) 内容回顾 函数基础概念 函数基本结构 def func(arg): return arg; v1 = func(1 ...

  8. WebEx如何录制电脑内的声音

    WebEx如何录制电脑内的声音     事情是这样的,我需要参加一个网络课程,视频讲课的,但是呢,又因为自己白天需要干别的事,就想着怎么把视频录下来晚上回去看,找了WebEx录屏软件,尝试了下,录屏听 ...

  9. 说说我对SQL语句执行顺序的理解,以SQL Server为例

    有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...

  10. 87)PHP,PDO的预编译技术

    (1) 比如以下的语句: insert into biao1 values(‘李宁’,‘’): insert into biao1 values(‘安踏’,‘’): insert into biao1 ...