成都企业网站备案流程,余姚专业网站建设公司,赣州做网站建设,建设网站需要懂什么意思前言
安全这种东西就是不发生则已#xff0c;一发生则惊人。作为前端#xff0c;平时对这方面的知识没啥研究#xff0c;最近了解了下#xff0c;特此沉淀。文章内容包括以下几个典型的 web 安全知识点#xff1a;XSS、CSRF、点击劫持、SQL 注入和上传问题等#xff08;…前言
安全这种东西就是不发生则已一发生则惊人。作为前端平时对这方面的知识没啥研究最近了解了下特此沉淀。文章内容包括以下几个典型的 web 安全知识点XSS、CSRF、点击劫持、SQL 注入和上传问题等下文以小王代指攻击者话不多说我们直接开车附带的例子浅显易懂哦。
XSSCross-site scripting
XSS 中文叫做跨站脚本攻击。 一句话解释小王在网页中注入恶意代码当用户访问页面时代码会自动运行。 具体点说凡是在页面中可输入的地方如地址栏、搜索框和评论区等等都有隐藏的风险小王可以在这些地方输入一些特殊的代码形如 scriptalert(1)/script于是乎本来只是单纯的文本变成了可执行的代码从而造成了攻击。你可能会觉得 alert(1) 能有多大点事但把它换成别的威力就不一样了它可以重定向到一个由小王控制的页面、冒充用户发送请求、窃取用户信息发送到小王的服务器上等等。当然了这还不够具体例子才是最直白的。
举个栗子
因为 XSS 攻击有反射型、存储型和 DOM 型三种类型所以我们每种都举个简单的栗子
反射型
反射型 XSS 主要有以下两个步骤
假设我们访问一个 www.a.com/?namehh 页面后端会把其中的 name 参数取出来并拼接到 html 中形如 p你好啊hh/p返回给用户。这时如果我们访问 www.a.com/?namehhscriptalert(1)/script 页面此时后端会返回形如 p你好啊hhscriptalert(1)/script/p 这样的一个 html其中的 script 脚本就会在我们的浏览器上加载执行从而造成攻击。
你可能会觉得这种 url 看起来就有嫌疑我们一般不访问但如果把这个 url 转成一个短网址所谓短网址就是把 url 转成一个 看起来简约又正常的链接并在网上散播通常伴随一些美女图片、外挂和金钱等一些具有诱惑力的内容从而骗取用户点击这个 url造成攻击。所以日常生活中不要乱扫二维码、乱点链接。
当然了拼接的形式多种多样
拼接前拼接字符串拼接后div#{msg}/divscriptalert(1)/scriptdivscriptalert(1)/script/divimg src#{image} /1 onerroralert(1)img src1 onerroralert(1) /var data #{data}hello;alert(1);var data hello;alert(1);
存储型
这种类型一般出现在评论区、论坛、留言等类似的地方基本流程是小王提交了一个恶意评论就是包含一些恶意代码和上面类似形如这样的评论 img src1 onerroralert(1) /只不过该评论被保存到了数据库中而评论对大家又都是可见的所以任何用户访问该页面时恶意代码就会从数据库中取出拼接在 html 中返回给用户页面加载评论的同时也执行了其中的恶意代码。与反射型相比存储型的辐射范围更加广泛处理起来也较为麻烦有时还需要查好多库删好几张表。
DOM 型
典型的例子就是你连接了一个公共 wifi浏览页面的时候在底部或者四周有时会有一些小广告的出现因为这种网络劫持会动态修改页面的内容比如在 html 中追加一些广告或暗链暗链就是偷偷加入几个 a 标签一般可用来增加搜索排名要注意的是这种攻击是不涉及到服务器的它的核心是动态修改 dom。
小小总结
总的来说就是页面可输入或拼接显示的地方就可能会有潜在的风险。我们演示个小的 demo虽然实际上不是这样的但意思到了 当我们第一次输入 scriptalert(1)/script 的时候alert 不生效是因为 H5 中规定用 innerHTML 插入的 script 将不被执行但是我们可以写别的比如 img srcx onerroralert(1)此时 alert 就被执行了这个在 MDN 上有明确的说明这里给大家截图看一下 作为前端平时要注意 innerHTML 等一些有字符串拼接并展示的地方。
防御措施
转义和过滤
一般来可以使用编码或转义的方式来防御 XSS 攻击就像下面这样
function escape(str) {if (!str) return str str.replace(//g, amp;)str str.replace(//g, lt;)str str.replace(//g, gt;)str str.replace(//g, quot;)str str.replace(//g, #39;)return str
}
对于富文本内容因为其需要保留 html所以不好直接使用转义的方法通常使用白名单过滤就是允许特定的 html 标签和属性以抵御 XSS 攻击。当然了更不要相信用户的任何输入对用户的输入进行特殊字符如尖括号的检查也是有必要的。
CSPContent Security Policy
这个其实就是设置个响应头信息Content-Security-Policy告诉浏览器哪些资源是可加载执行的实质就是白名单制度为对应的内容指定相应的策略。具体设置大家可以查阅 MDN这里截个 github 的图作为示例 或者加个 meta 标签
meta http-equivContent-Security-Policy contentimg-src self;
其他
HttpOnly禁止 js 读取 cookie限制输入内容长度提高门槛敏感操作使用验证码
CSRFCross-site request forgery
CSRF 中文叫做跨站请求伪造。 一句话解释小王盗用你的身份以你的名义发送恶意请求发邮件、转账之类的。
举个栗子
这个没有分类所以我们直接上栗子
用户登录了 www.a.com登录态被保存在 cookie 中这是前提。假设 www.a.com 页面有个转账的功能形如https://www.a.com/index.php?money100toxx这个请求能够把 100 块转到 xx 同学的账户上。小王引诱用户打开了 www.b.com 页面而这个页面有一个形如 img srchttps://www.a.com/index.php?money100towo 这样的标签于是浏览器就会自动发起一个转账请求并且这个请求会携带上 a 网站的 cookie即便这个标签根本不在 www.a.com 内所以能请求成功。用户并不晓得这很可怕。所以有些网站会要求已登录的用户在一些关键步骤时再次输入密码就有一定道理了。
防御措施
CSRF 攻击通常有以下两个特点
通常发生在第三方网站。小王并不能获取到 cookie他只是借用请求有点借刀杀人的意思。
针对以上两点我们可以有以下几种预防措施
referer
因为请求头中的 referer 记录了请求的来源地址referer 会指向 b 网站所以我们可以对 referer 进行检测以此来禁止来自第三方网站的请求。 但每个浏览器对于 referer 的具体实现可能有差别也不能保证浏览器自身没有安全漏洞。在有些情况下攻击者甚至可以隐藏、修改自己请求的 referer。另外 origin 也是一样的道理origin 只包含了域名信息不包括具体的 url 路径
token
由于 CSRF 是利用了浏览器自动携带 cookie 的特性所以我们可以多加一个校验的字段不通过 cookie 传递简单点说就是
登录的时候服务端会返回一个 token 值给前端。前端在发送请求的时候再把这个 token 当作请求数据传递或者放在请求头里。后端会对这个 token 值进行校验。而由 CSRF 的请求是没有携带 token 的所以不会成功。
至于 token 是啥这里简单说明以下其实它是个字符串你可以当做个临时 id一般由 userId、随机数、时间戳通过散列算法得到形如let token md5(userId time Math.random() ...)其实就是调用一个函数。
加验证码
加验证码的本质和 token 是一样的这两种类型的原理都是在 cookie 之外的某个地方多增加一个字段供后端校验这里增加的字段就是验证码。这样一来第三方只能携带上 cookie 但是带不上这个验证码字段也就预防了 csrf 攻击。
SameSite
可以通过设置 SameSite 的值来禁止第三方网站携带 cookie。SameSite 有三个值可以设置Strict、Lax、None。具体作用如下
Strict完全禁止第三方 cookie跨站点时任何情况下都不会发送 cookie。Lax大多数情况也是不发送第三方 cookie但是导航到目标网址的 get 请求除外。Chrome 计划将 Lax 变为默认设置。None可以显式关闭 SameSite 属性不过必须同时设置 Secure 属性因为 cookie 只能通过 https 协议发送否则无效。 大概这样设置Set-Cookie: CookieNameCookieValue; SameSiteStrict;
点击劫持
这个比较好理解我们直接看例子 其实就是通过覆盖不可见的页面诱导用户点击而造成的攻击行为。稍微高级一点的伪装可以怎么样呢就是做成一个游戏界面让你在页面上狂点而实际上呢则会触发一些攻击事件比如打开摄像头、发送邮件之类的。至于我们为什么会点击因为骗子通常知道你想要什么好奇心也驱使你这样做并且我们当时并不觉得会有什么危险所以我们都愿意试试看。
防御措施
禁止内嵌 iframe
让自己的网站不要被目标网站内嵌可以通过 js 和设置头部 X-Frame-Options 实现
if (top.location ! window.location) top.location window.locationsetHeader(X-Frame-Options, DENY)
验证码
增加攻击成本。
SQL 注入
因为这个和 XSS 有点小像所以在这里稍微提及一下。 一句话解释小王利用潜在的数据库漏洞访问或修改数据。
举个栗子
用户填写了用户名和密码点击登录发送了一个请求。后端接收到请求并解析参数将其拼装成一个 SQL 语句执行形如 select * from user where username ${data.username} and pwd${data.pwd}并返回登录成功。结果小王在填写密码的时候写上了 1 or 11结果后端一拼接 SQL 语句就变成了 select * from user where username xiaowang and pwd 1 or 11显然这是成立的也会返回成功。
是不是和 XSS 的拼接漏洞很像呢本来是数据的东西变成程序执行了。
防御措施
以下内容可跳过仅作为了解
不要给出具体的错误信息越具体越给了小王方向检查数据类型对数据进行转义使用参数化查询相当于分成两条语句第一步明确目的不能再被修改第二步不管传啥只当作数据处理使用 ORM对象关系映射就是可以不用拼 SQL 语句的意思
上传问题
一句话解释上传的文件被当做程序解析执行。
举个栗子
小王上传了一个恶意文件 xx.php内容如下
?phpphpinfo();
?
如果我们点击该文件的下载链接就会执行该 php 文件前提是服务器可以解析 php 文件并且文件所在目录要有执行的权限。
防御措施
限制上传后缀 if (ext js) throw new Error(xxx)文件类型检测 if (file.type ! images/png) throw new Error(xxx)检查文件内容以什么开头程序输出就是不运行有个读写的过程权限控制可写可执行互斥原则
DoS 攻击
DoSDenial of Service攻击就是利用合理的服务请求来占用过多的服务资源从而使得合法用户无法得到服务的响应。比如 SYNflood 攻击、IP 欺骗、带宽DoS攻击、塞满服务器的硬盘等攻击手段这个作为了解就行具体可自行百度。
其他相关措施
主要都是提高攻击门槛
明文变换成密文虽然我们很多密码明文都是一样的但不同网站的密文一般是不一样的https 传输频率限制验证码
总结
没有绝对安全的网站我们要做的就是提高攻击成本问题的关键也不在于小王能不能破译而是值不值得毕竟付出与收获不成正比谁愿意倒贴呢
CSDN大礼包《黑客网络安全入门进阶学习资源包》免费分享
朋友们如果有需要全套《黑客网络安全入门进阶学习资源包》可以扫描下方二维码免费领取 点击链接也可直接获取 CSDN大礼包《黑客网络安全入门进阶学习资源包》免费分享
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。 ② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供 因篇幅有限仅展示部分资料
2️⃣视频配套资料国内外网安书籍、文档
① 文档和书籍资料 ② 黑客技术 因篇幅有限仅展示部分资料
3️⃣网络安全源码合集工具包 4️⃣网络安全面试题 上述所有资料 ⚡️ 朋友们如果有需要全套 《网络安全入门进阶学习资源包》可以扫描下方二维码免费领取 点击链接也可直接获取 CSDN大礼包《黑客网络安全入门进阶学习资源包》免费分享