XSS
XSS
全称是 Cross Site Scripting
(即跨站脚本)。XSS
是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。
这些操作一般可以完成下面这些事情:
- 窃取
Cookie
。 - 监听用户行为,比如输入账号密码后直接发送到黑客服务器。
- 修改 DOM 伪造登录表单。
- 在页面中生成浮窗广告。
XSS
类型
- 存储型:即攻击被存储在服务端,常见的是在评论区插入攻击脚本,如果脚本被储存到服务端,那么所有看见对应评论的用户都会受到攻击。
- 反射型:攻击者将脚本混在URL里,服务端接收到URL将恶意代码当做参数取出并拼接在HTML里返回,浏览器解析此HTML后即执行恶意代码。
- DOM型:将攻击脚本写在URL中,诱导用户点击该URL,如果URL被解析,那么攻击脚本就会被运行。和前两者的差别主要在于DOM型攻击不经过服务端。
如何预防 XSS
- 输入检查:对输入内容中的
script
和<iframe>
等标签进行转义或者过滤 - 设置
httpOnly
:很多XSS
攻击目标都是窃取用户cookie
伪造身份认证,设置此属性可防止JS
获取cookie
- 开启
CSP
,即开启白名单(该安全策略的实现基于一个称作Content-Security-Policy
的 HTTP 首部。),可阻止白名单以外的资源加载和运行
CSRF
CSRF
攻击(Cross-site request forgery)
跨站请求伪造。它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。
如何触发 CSRF
- 在图片当中嵌入恶意网址,当用户访问图片时,浏览器会自动向恶意网址发起请求。
- 自动提交的表单,访问页面后,表单自动提交,相当于模拟用户完成一次 POST 操作,同时携带用户的 cookie 信息。让服务器误以为是一个正常的用户在操作,让各种恶意的操作变为可能。
- 诱导用户点击,发送请求,同时携带用户的 cookie 信息。
预防策略
对于 CSRF
攻击而言,黑客只能借助受害者的 cookie
骗取服务器的信任。但黑客无法知晓 cookie
的内容。另外对于服务器返回的信息,黑客也是无法解析的。
- 验证
Token
:浏览器请求服务器时,服务器返回一个token
,每个请求都需同时带上token
和cookie
才会被认为是合法请求 - 验证
Referer
:通过验证请求头的Referer
来验证来源站点,但请求头很容易伪造 - 设置
SameSite
:设置cookie
的SameSite
,可以让cookie
不随跨站请求发出,但浏览器兼容不一 - 服务端添加
X-Frame-Options
响应头:这个HTTP
响应头是为了防御用iframe
嵌套的点击劫持攻击。 这样浏览器就会阻止嵌入网页的渲染 - 敏感操作使用更复杂的步骤,如输入验证码
中间人攻击
概念
中间人攻击(Man-in-the-MiddleAttack
,简称“MITM攻击”):是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。
概括:请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击
中间人攻击是一个(缺乏)相互认证的攻击。占据两个参与者之间的通信通道是中间人攻击的核心。
大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构颁发,并且能执行双向身份认证。
攻击过程
- 客户端发送请求到服务端,请求被中间人截获。
- 服务器向客户端发送公钥。
- 中间人截获公钥,保留在自己手上。然后自己生成一个伪造的公钥,发给客户端。
- 客户端收到伪造的公钥后,生成加密hash值发给服务器。
- 中间人获得加密hash值,用自己的私钥解密获得真秘钥。同时生成假的加密hash值,发给服务器。
- 服务器用私钥解密获得假密钥。然后加密数据传输给客户端。
攻击类型
-
Wi-Fi欺骗:攻击者可以创建与本地免费Wi-Fi选项同名的假Wi-Fi接入点。例如,攻击者可能会模仿Wi-Fi名称或创建一个名为“Guest Wi-Fi”或类似名称的假选项。一旦连接到恶意访问点,攻击者就可以监视你的在线活动。
-
HTTPS欺骗:攻击者欺骗你的浏览器,使其相信你正在使用一个受信任的网站,从而将你的流量重定向到一个不安全的网站。当你输入凭据时,攻击者会将其窃取。
-
SSL劫持:当你尝试连接到不安全的HTTP站点时,浏览器可以将你重定向到安全HTTPS选项。但是,攻击者可以劫持重定向过程,将指向其服务器的链接放在中间,窃取你的数据和你输入的任何凭据。
-
DNS欺骗:域名系统帮助你在互联网上导航,把地址栏中的URL从人类可读的文本变成计算机可读的IP地址。然后,DNS欺骗会迫使你的浏览器在攻击者的控制下访问特定地址。
-
电子邮件劫持:如果攻击者能够访问受信任机构(如银行)的邮箱,甚至电子邮件服务器,他们就可以截获包含敏感信息的客户电子邮件,甚至开始以机构本身的身份发送电子邮件。
如何防止中间人攻击
- 使用HTTPS:确保你访问的每个网站都使用HTTPS。
- 不要忽略警告:如果你的浏览器告诉你正在访问的网站有问题,相信它。安全证书警告可能是将凭据授予攻击者和保持安全之间的区别。
- 不要使用公共Wi-Fi:不要使用公共Wi-Fi。有时,使用公共Wi-Fi是不可避免的。如果必须使用公共Wi-Fi连接,则应下载并安装VPN,为连接添加一些安全性。此外,在使用公共Wi-Fi连接时,请注意浏览器安全警告。如果浏览器警告的数量突然增加,则可能表明存在MITM攻击或漏洞。
- 运行并更新防病毒软件:确保防病毒软件是最新的。
SQL
注入原理及防范
SQL
注入原理
通过把 SQL
命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL
命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
防止注入
- 永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。
- 永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
- 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
- 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。
- 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。
参考文章:
《 图解 HTTP 》