Web高级 网站安全
Posted 两只小蚂蚁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web高级 网站安全相关的知识,希望对你有一定的参考价值。
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 防范手段
- 通过正则表达校验用户输入
不实用,不管是在客户端还是服务端做验证,都不能100%保证过滤所有情况.
还有一个缺点就是会对正常数据输入造成一定影响。 - 实用存储过程
不实用,不管哪个项目都不可能全局实用存储过程。
- 参数化SQL语句
较为常见
如: SqlCommand.Parameters.Add("@name", SqlDbType.string).Value = "SQL";
原理概述:数据库有一套执行计划重用原理,SQL语句的语句体会被预编译为执行计划,而参数会被隔离和辨识为独立部分。那么对于不符合预期的参数值或类型就不会得到正确执行。 - 语言框架携带的对象->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 防御手段往下看
3. HTTP协议隐患
HTTP协议本身的安全隐患,暂略
4. 防御手段
4.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会在页面中插入广告(通过劫持或内容替换等)或其他东西,如果采用禁止页面加载会影响终端用户的体验。对这种流氓行为怎么处理以后的文章会有提到。4.2 HTTP Strict Transport Security (HSTS)
告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP.阻止黑客的中间人攻击.
使用场景,比如升级所有http链接到https。4.3 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高级 网站安全的主要内容,如果未能解决你的问题,请参考以下文章
Django:用于轻松安全 Web 开发的高级 Python Web 框架
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段