关于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. pip3与pyttsx3文字语音转换

    今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字, 打算通过pip3 install pyttsx安装包,结果报错, 然后试了一下发现不行,去网上查了一下发现p ...

  2. windows系统 安装与配置zabbix-agent

    1.下载安装包 http://192.168.130.150/zabbix/zabbix_agent-4.0.12-win-amd64-openssl.msi 下载包的链接地址 windowszabb ...

  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:强制元素隐藏

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Django settings源码解析

    Django settings源码 Django中有两个配置文件 局部配置:配置文件settings.py,即项目同名文件夹下的settings.py文件 全局配置:django内部全局的配置文件se ...

  5. shell脚本中执行sql脚本并传递参数(mysql为例)

    1.mysql脚本文件 t.sql insert into test.t values(@name,@age); exit 2.shell脚本文件 a.sh  (为方便演示,与t.sql文件放在同一目 ...

  6. P1095 解码PAT准考证

    1095 解码PAT准考证 (25分)   PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: ...

  7. 074、Java面向对象之构造方法重载

    01.代码如下: package TIANPAN; class Book { // 定义一个新的类 private String title; // 书的名字 private double price ...

  8. 物流跟踪 调用快递鸟API

    概要:关于调用快递鸟API,我有几句话想说,有几行代码想写 业务需求:就是做做商城,卖卖东西.然后需要做个物流跟踪的功能 需要获取的信息大概就是这个样子 现在看这个快递怎么这么慢 如何实现? 直接调用 ...

  9. Problem A: Assembly Required K路归并

    Problem A: Assembly Required Princess Lucy broke her old reading lamp, and needs a new one. The cast ...

  10. Python测试进阶——(6)Bash脚本启动Python监控程序并传递PID

    用HiBench执行Hadoop——Sort测试用例,进入 /HiBench-master/bin/workloads/micro/sort/hadoop 目录下,执行命令: [root@node1 ...