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. 使用 <embed> 标签显示 flash文件(swf)格式 ,如何设置 width 和 height 宽度,高度.

    1. embed 标签 支持  .swf 格式.     .flv 的不支持. 2. 通常情况下, 网站中上传 多个 flash文件. 它的默认大小是不一样的. 而且 可以 宽度 大于 高度(横向的) ...

  2. VBA在WORD应用中如何确定文本是否被选定

    确定文本是否被选定Selection 对象的 Type 属性返回所选内容类型的信息.如果所选内容为插入点,则下列示例显示一条消息. Sub IsTextSelected()    If Selecti ...

  3. .net实现扫描二维码登录webqq群抓取qq群信息

    一.流程 1. //获得二维码的qrsig,cookie标志 2. //登录二维码获得二维码的状态,及最新的url 3. //登录此网址,获得Cookies 4.//cookies,筛选出skey信息 ...

  4. xargs处理来之STDIN的输入

    xargs能够将标准输入进行处理,配合下一个命令进行批量处理 #example grep -f go.test ~/jqyou/genedhs_10D |sed '/-1$/d' |awk '{pri ...

  5. 虚拟机中ubuntu不能联网问题的解决——NAT方式

    困惑我多时的Ubuntu联网问题终于解决啦,开心!!!现记录如下,方便日后取用. 可先直接尝试第3步,若不行,则走完全程. 1.查看/设置下NAT的网络 打开VMware Workstation, 点 ...

  6. 10_java基础——构造器里调用构造器

    package com.huawei.test.java04; /** * This is Description * * @author * @date 2018/08/30 */ public c ...

  7. IOS 生成静态库文件(.a文件)

    http://www.cnblogs.com/lyy-5518/p/5459643.html

  8. pip install -r requirements.txt

    生成文件 pip freeze > requirements.txt pip install --help Usage: pip install [options] <requiremen ...

  9. JAVA日常之三

    一.Main方法的args参数 args[] 是程序运行前可传入的参数,比如 java HelloWorld a,那么在HelloWorld的main方法里面 args就是{"a" ...

  10. md5Util

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