关于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. 2020.2.19 restful的学习

    restful Api 设计要素 3-8 如何设计Restful Api 资源路径(url),HTTP动词,过滤信息(做分页),状态码,错误处理,返回结果    3-9    初始化运行参数 3-10 ...

  2. Mac的Terminal中无法使用mvim解决方案

    对于每个人来说,都会有特别喜欢的编辑器.对于很多热爱Unix/Linux的人来说,Vim/vi肯定是很熟悉的“编辑利器”了. 当然,对于Mac用户来说,肯定也不乏对Vim狂热的人.庆幸的是,Vim对M ...

  3. Linux CentOS7 VMware克隆、虚拟机之间互连——初学笔记

    一.VMware克隆:选中我的第一个虚拟机,右键下拉菜单—管理—克隆. 弹出对话框,下一步根据提示:             完成克隆: 二.虚拟机互连: 配置第二虚拟机IP,使用:vi /etc/s ...

  4. jenkins 2.204.2 安装, 使用国内源安装, 并且跳过插件界面, 更新成国内插件源.

    需要java环境支持,自行百度. jenkins 安装源在国外, 下载会比较慢, 尤其在linux下, 使用yum或者apt install jenkins方式安装时,经常会下载失败. 由于yum或者 ...

  5. 072、Java面向对象之定义构造方法

    01.代码如下: package TIANPAN; class Book { // 定义一个新的类 public Book() { // 构造方法 System.out.println("* ...

  6. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  7. 写的一个轻量级javascript框架的设计模式

    公司一直使用jQuery框架,一些小的项目还是觉得jQuery框架太过于强大了,于是自己周末有空琢磨着写个自己的框架.谈到js的设计模式,不得不说说js的类继承机制,javascript不同于PHP可 ...

  8. HDU 5523:Game

    Game  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Others) 问题描述 XY在玩一 ...

  9. MySQL导出数据库和导入数据库

    一.导出: 语法:mysqldump --default-character-set=utf8 -u用户名 -p密码 数据库名 -d --add-drop-table > 导出文件名.sql 注 ...

  10. tomcat-性能?

    http://www.cnblogs.com/zhuawang/p/5213788.html http://www.cnblogs.com/zhuawang/p/5213192.html http:/ ...