1. SQL注入

虽然现在SQL注入发生的情况总的来说越来越少,还是提二句。关于什么是SQL注入大家都知道就不多说了。

1.1 原理

我们在做前端页面的时候,少不了会又各种输入框,然后通过GET或者POST发送至后端。

那么如果后端在处理时直接使用SQL拼接的话就会产生问题。

//比如提交地址如下
//http://mysite/search?name='SQL'
在后端生成SQL语句为
var paramName = 'SQL'//从URL获取
var sqlQuery = "select * from table1 where name='"+paramName+"'"
//生成的结果为 - select * from table1 where name='SQL'
//如果我们在URL中带过来的参数是 SQL or 1=1
//生成的结果则为 - select * from table1 where name='SQL' or 1=1
//那么学过SQL都知道我们还可以在后面再添加语句以获取额外的数据

1.2 防范手段

  1. 通过正则表达校验用户输入

    不实用,不管是在客户端还是服务端做验证,都不能100%保证过滤所有情况.

    还有一个缺点就是会对正常数据输入造成一定影响。
  2. 使用存储过程

    不实用,不管哪个项目都不可能全局使用存储过程。
  3. 参数化SQL语句

    较为常见

    如: SqlCommand.Parameters.Add("@name", SqlDbType.string).Value = "SQL";

    原理概述:数据库有一套执行计划重用原理,SQL语句的语句体会被预编译为执行计划,而参数会被隔离和辨识为独立部分。那么对于不符合预期的参数值或类型就不会得到正确执行。
  4. 语言框架携带的对象->SQL转换机制

    较为常见,如Hibernate、Entity Framework 的LINQ

2. XSS

2.1 类型

  • 反射型

    数据流向:浏览器 -> 后端 -> 浏览器

    如何产生:前端进行GET形式的数据提交至后端,由后端处理并将处理结果反馈到前端,前端将结果插入DOM。

    漏洞:A将一段带有特殊参数的链接发送给B,如http://ASite/pageA?param=,在服务端并未进行特殊处理的情况下,返回参数中的字符串到A。

    那么A将为加载从BSite的hack.js。则B站点可以窃取到A用户的cookie等信息。
  • 存储型

    数据流向:浏览器 -> 后端 -> 存储 -> 后端 -> 浏览器

    如何产生:前端提交的数据并未进行特殊处理,就进行持久化存储,并将持久化存储的结果又展示给其他用户。

    漏洞:比如A在cnblog发表了一篇新的文章,他在该文章中嵌入了标签,那么所有访问过该文章的人就会被窃取到cookie等信息。
  • DOM型

    数据流向:浏览器 -> 浏览器

    如何产生:前端使用脚本直接获取URL参数并插入到DOM中,全程没有服务端参与

    漏洞:A将一段带有特殊参数的链接发送给B,如http://ASite/pageA?param=,前端脚本会直接获取参数并插入DOM中,则B会加载B站点的hack.js,与反射型不同的是这里不需要后端的参与.

2.2 防御手段

  1. Content Security Policy (CSP)

    CSP 的实质就是白名单制度,服务端明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本。
  • 如何启用:

    通过HTTP协议头Content-Security-Policy或meta标签来指定白名单
  • 限制类型

    js,css,img,media,font,plugin,frame,workerjs,manifest,http connect等
  • 违反处理X-XSS-Protection头

    禁止该页面加载

    或,上报违反行为

    注:现在很多代理网关或CDN会在页面中插入广告(通过劫持或内容替换等)或其他东西,如果采用禁止页面加载会影响终端用户的体验。对这种流氓行为怎么处理以后的文章会有提到。

3. CSRF

3.1 例子

  1. 用户C访问正常网站A时进行登录,浏览器保存A的cookie
  2. 用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数
  3. 而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookie
  4. 所以网站A在接收到请求之后可判断当前用户是登录状态,所以根据用户的权限做具体的操作逻辑,造成伪造成功

3.2 原理

  • CSRF能够攻击成功在于Web的身份验证机制->使用cookie

3.3 防御手段

  1. HTTP Referer 头验证

    根据Http协议,发送Http请求时会带有Referer字段,其值由浏览器负责添加,为发起该请求的站点的域名.但是,该值并不是一定能获取到,取决于浏览器实现和用户配置是否启用.

    结论:不可靠
  2. Anti CSRF Token

    在进行页面请求的时候,由服务端生成随机动态Token附加到Session或header中.在进行后续请求时,不管是Get/Post/Form都需要带上该Token,由服务端验证.

    结论:常见手段
  3. HTTP自定义头

    在请求的HTTP头部中附加自定义头部.

    结论:常见手段

4. clickjacking(点击劫持)

4.1 例子

  1. 用户C访问网站A,在网站A的页面中嵌入了网站B的内容,如新闻、图片等
  2. 用户C点击看见的网站B的内容
  3. 该点击事件被劫持,从而让用户访问其不应该访问的内容

    注:单一的点击劫持也许粗略一看并不能达到太恶略的攻击效果,但如果联合 XSS+CSRF+clickjacking,可以做的事情就很多了。

4.2 防御手段

HTTP协议中的头部 X-Frame-Options

  • DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
  • SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示
  • ALLOW-FROM:表示该页面可以在指定来源的 frame 中展示。

5. 其他

  1. HTTP Strict Transport Security (HSTS)

    告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP.阻止黑客的中间人攻击.

    使用场景,比如升级所有http链接到https。
  2. Cookie security
  • Secure

    标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端
  • HttpOnly

    标记为 HttpOnly 的Cookie无法通过JavaScript的 Document.cookie API访问,它们只发送给服务端

refs:

https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP

Web高级 网站安全的更多相关文章

  1. Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径

    Java/javaEE/web/jsp/网站编程环境配置及其软件下载和网站路径 (2015/07/08更新) JDK下载地址(JDK官网下载地址) 下载地址为:http://www.oracle.co ...

  2. Web UI 网站用户界面设计命名规范

    Web UI 网站用户界面设计命名规范 WEB UI设计命名规范,也就是网站用户界面设计(网页设计)命名规范. 这套规范并非单纯的CSS.html或JavaScript命名规范,它涉及了很多使用Pho ...

  3. Web高级 HTTP报文

    1. 报文结构 1.1 请求报文结构 Start-Line 单行,包括 Method + URL + HTTP Version Headers 多行,形式为 Name:Value Body 可选,主体 ...

  4. 搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3

    Web GIS系列: 搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 使用GeoServer+QGIS发布WMTS服务 使用GeoSe ...

  5. 【转】2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题

    腾讯面试(WEB高级应用开发工程师<PHP>)非答案啊!!! 开始正题之前,容博主啰嗦两句吧,呵呵.(你也可跳过直接到红色字体看题!) 腾讯一直是我很敬重的企业,尽管小企鹅在战略上饱受争议 ...

  6. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  7. web前端网站收藏

    参考 w3school:html,css,js等各种参考 W3schools:较之w3school界面更华丽 webplatform:学习最新的web技术 MDN:mozilla developer ...

  8. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  9. Java Web高级编程(二)

    使用会话维持状态 一.会话 为了实现关联同一个用户端的多个请求和这些请求之间数据的共享,需要用到会话,会话用于维持请求和请求之间的状态.从服务器的角度,当用户的Web浏览器打开第一个链接到服务器的套接 ...

随机推荐

  1. epoll+socket实现 socket并发 linux服务器

    /* 实现功能:通过epoll, 处理多个socket * 监听一个端口,监听到有链接时,添加到epoll_event * xs */ #include <stdio.h> #includ ...

  2. Arcgis做出voronoi图

    人类第一步,,,我需要给我目前的基站点数据划分voronoi,预期得到每个基站的服务范围 在地统计模块geostatistical analysis 下面的数据探索expore就有Voronoi图 将 ...

  3. 网赚app

    网赚app有很多目前来说做的比较好的赚的比较多的有四款推荐 宝石星球下载地址:http://www.baoshixingqiu.com/redPacket?key=548341 雪梨网APP下载地址 ...

  4. thinkphp5.0如何隐藏index.php入口文件

    隐藏入口文件 public/index.php 同级的.htaccess文件 [ Apache ] 方法1: <IfModule mod_rewrite.c> Options +Follo ...

  5. 关于使用 myeclipse连接MySql的问题

    配置Hibernate.cfg.xml测试连接Mysql数据库时老是报错,如下图: 想想这样配置也没有错啊,可是一直测试连接不上.后面上查了一下,需要在连接字符串后面加上?serverTimezone ...

  6. slurm作业提交系统常用命令

    写下自己的关于slurm感悟一二 与各人pc不同,slurm的基本架构是,一个中专节点,之后有很多局域网ip对应不同的计算节点,在中专节点敲命令,命令中可以指定需要用到哪些计算节点 1. 查看有哪些分 ...

  7. 使用ueditor配置后台接口

    因为后台是java,所以针对的是jsp版本的ueditor. 工程中需要导入jsp目录lib下的jar包.如果是maven管理的工程,可以导入jar包. 上传图片的功能的话,需要后台配置正确.如果需要 ...

  8. md5Util

    package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...

  9. 页面布局 ——图片自动按比例显示&&图片随外部div的增大而按比例增大

    图片按比例显示,分为两种情况. 1.空的div内加图片 <div class="emty"><img src="img/my.png"> ...

  10. python_ 函数

    函数是啥? 函数能提高应用的模块性,和代码的重复利用率 函数特点? 1 代码块以 def 关键词开头,后接函数名和圆括号() 2 任何传入参数和自变量必须放在圆括号中间 3 函数以冒号开始,并且缩进 ...