跳到主要内容

安全

常见 web 安全问题

以下是一些常见的 web 前端网络攻击类型:

  1. 跨站脚本攻击(Cross-Site Scripting, XSS):XSS攻击利用了 Web 应用程序对用户输入的不当处理,以将恶意代码注入到 Web 页面中。当用户访问包含恶意代码的页面时,攻击者可以利用这些代码窃取用户的敏感信息、劫持用户会话等。

  2. 跨站请求伪造(Cross-Site Request Forgery, CSRF):CSRF攻击利用了用户已经登录了受信任网站的身份,通过在受害者的浏览器中执行恶意代码,将伪造的请求发送到受信任网站上,从而执行某些操作或者获取某些信息。

  3. 点击劫持(Clickjacking):点击劫持是一种利用透明 iframe 层来覆盖网页上的其他内容,欺骗用户点击不可见的按钮或链接,以执行攻击者所需的操作。

  4. HTML 注入攻击:HTML 注入攻击利用了 Web 应用程序对用户输入的不当处理,以将恶意的 HTML 代码插入到 Web 页面中。这种攻击通常被用来修改页面内容、欺骗用户或者实施其他恶意行为。

  5. 敏感数据泄露(Sensitive Data Leakage):敏感数据泄露可能会发生在 Web 应用程序中,其中攻击者可以通过暴力破解、SQL 注入等攻击方式,获取存储在数据库中的敏感数据(如用户名、密码、信用卡信息等)。

  6. 带宽滥用(Bandwidth Abuse):带宽滥用是指攻击者利用 Web 应用程序或服务器的漏洞来消耗服务器的资源和带宽,从而使服务器变得缓慢或无法正常工作。

  7. HTTP 请求欺骗(HTTP Request Spoofing):HTTP 请求欺骗是一种利用 Web 应用程序对输入的不当处理,以篡改 HTTP 请求的攻击方式。攻击者可以通过伪造 HTTP 请求头信息、修改 HTTP 请求方法等方式,欺骗 Web 应用程序执行攻击者所需的操作。

需要注意的是,这些攻击类型通常会结合使用,攻击者会利用多种攻击方式,以更好地实现攻击目标。

关键词:XSS攻击、CSRF攻击、点击劫持共计、URL跳转漏洞、SQL注入攻击、OS命令注入攻击

参考文档:

同源策略

同源策略是一种安全机制,它是浏览器对 JavaScript 实施的一种安全限制。所谓“同源”是指域名、协议、端口号均相同。同源策略限制了一个页面中的脚本只能与同源页面的脚本进行交互,而不能与不同源页面的脚本进行交互。这是为了防止恶意脚本窃取数据、进行 XSS 攻击等安全问题。

同源策略限制的资源包括:

  • Cookie、LocalStorage 和 IndexDB 等存储性资源
  • AJAX、WebSocket 等发送 HTTP 请求的方法
  • DOM 节点
  • 其他通过脚本或插件执行的跨域请求

这些资源只能与同源页面进行交互,不能与不同源的页面进行交互。

同源策略(Same-Origin Policy)是一种浏览器安全机制,用于限制不同源(域名、协议、端口)之间的交互。它是一种重要的安全措施,用于保护用户的隐私和安全,防止恶意网站通过跨域请求获取用户的敏感信息或进行恶意操作。

同源策略要求网页资源(如JavaScript、CSS、图片等)只能与来源相同的资源进行交互,即只能与相同域名、相同协议和相同端口的资源进行通信。例如,一个网页加载自https://www.example.com域名下的资源,就只能与同一域名下的其他资源进行交互,无法直接访问其他域名的资源。

同源策略主要限制了以下几种行为:

  1. DOM访问限制:不同源的页面无法通过JavaScript等方式直接访问对方的DOM元素,即无法获取或修改对方页面的内容。

  2. Cookie、LocalStorage和IndexDB限制:不同源的页面无法读取对方设置的Cookie、LocalStorage和IndexDB存储。

  3. AJAX请求限制:XMLHttpRequest、Fetch等网络请求在跨域时受到限制,通常无法发送跨域请求。

同源策略的存在有效地防止了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等安全威胁。如果需要在不同源之间进行数据交互,可以通过服务器端的代理或使用CORS(跨源资源共享)等技术来实现。

需要注意的是,同源策略只是浏览器的安全策略之一,而并非所有的网络请求都受到同源策略的限制。例如,通过<script>标签引入的外部JavaScript文件、通过<img>标签加载的图片等资源是不受同源策略限制的。此外,一些特定的标记,如<a>标签的href属性和<form>标签的action属性,也存在一些允许跨域的规则

CORS

JSONP JSONP是通过动态创建script标签的方式,利用script标签可以跨域请求资源的特性来实现的,本质是利用了script标签没有跨域限制的特性,可以在请求的url后加一个callback参数,后端接收到请求后,将需要传递的数据作为参数传递到callback函数中,前端定义该函数来接收数据,从而实现跨域通信。 #27

CORS CORS是一种现代浏览器支持的跨域解决方案,CORS全称为跨域资源共享(Cross-Origin Resource Sharing),其本质是在服务端设置允许跨域访问的响应头,浏览器通过判断响应头中是否允许跨域访问来决定是否允许跨域访问。 #28

postMessage postMessage是HTML5引入的一种新的跨域通信方式,主要是用于在不同窗口之间进行通信,包括不同域名、协议、端口等情况,通过调用window.postMessage()方法,在两个窗口之间发送消息,接收方通过监听message事件来接收消息,从而实现跨域通信。 #29

WebSocket WebSocket是一种新的网络协议,可以实现客户端和服务器之间的实时双向通信,同时也可以跨域通信,WebSocket协议建立在TCP协议之上,通过HTTP协议发起握手请求,握手成功后,客户端和服务器就可以通过WebSocket协议进行实时通信了。 #30

代理转发 代理转发是一种常用的跨域通信方式,主要是通过在同一域名下设置代理服务器,在代理服务器上实现跨域访问,再将结果返回给前端页面,从而实现跨域通信。

跨域手段有哪些

  1. cors
  2. postMessage
  3. JSONP
  4. websocket
  5. proxy 转发

csrf

跨站请求伪造(Cross-Site Request Forgery, CSRF)是一种常见的网络攻击方式,攻击者可以利用已登录的用户身份,通过伪造用户的请求,对服务器上的资源进行非法操作。下面是一种常见的 CSRF 攻击方式:

  1. 用户在浏览器中登录了某个网站,并获取了该网站的 Cookie。

  2. 攻击者诱导用户访问一个恶意网站,并在该网站上放置了一段恶意代码,用于发起 CSRF 攻击。

  3. 当用户在恶意网站上执行某个操作时,比如点击某个按钮或链接,恶意代码会自动向目标网站发送一个 HTTP 请求,请求中包含攻击者想要执行的操作和参数,同时也会携带用户的 Cookie。

  4. 目标网站接收到请求后,会认为这是一个合法的请求,因为它携带了用户的 Cookie。于是服务器会执行攻击者想要的操作,比如删除用户的数据、修改用户的密码等。

为了防止 CSRF 攻击,开发人员可以采取以下措施:

  1. 随机化 Token:为每个请求生成一个随机化的 Token,将 Token 放入表单中,并在服务器端进行验证。这可以防止攻击者伪造合法的请求。

  2. 使用 Referer 验证:在服务器端进行 Referer 验证,只允许来自合法来源的请求。这可以防止攻击者在自己的网站上放置恶意代码,进行 CSRF 攻击。

  3. 使用验证码:在某些敏感操作上,比如修改密码、删除数据等,可以要求用户输入验证码。这可以降低攻击者的成功率,因为攻击者很难获取验证码。

需要注意的是,以上措施并不能完全防止 CSRF 攻击,因为攻击者总是可以通过一些复杂的方法来规避这些防御措施。因此,开发人员需要综合考虑多种防范措施,以提高网站的安全性。

xsrf

xss

以下是一些防范跨站脚本攻击的常见方法:

  1. 输入过滤:对于所有输入的数据(如表单数据、URL 参数等),应该进行过滤和验证。特别是对于敏感数据(如密码、信用卡信息等),应该进行严格的验证,防止恶意的脚本注入。可以使用一些开源的输入验证工具,如OWASP ESAPI来过滤恶意输入。

  2. 对特殊字符进行转义:对于所有输出到页面上的数据,应该对特殊字符进行转义,比如将 < 转义为 <、将 > 转义为 > 等。这可以防止攻击者通过在页面上注入恶意的脚本。

  3. CSP(Content Security Policy):CSP是一种浏览器安全机制,可以限制 Web 页面可以加载哪些资源。通过设置合适的 CSP,可以防止恶意脚本的注入。

  4. HttpOnly Cookie:通过设置 HttpOnly 标志,可以防止脚本访问 Cookie。这可以防止攻击者窃取用户的身份验证信息。

  5. 随机化 Session ID:在用户登录后,应该为其分配一个随机化的 Session ID,防止攻击者通过猜测 Session ID 来劫持用户会话。

  6. 使用安全的编程语言和框架:使用安全的编程语言和框架可以降低跨站脚本攻击的风险。比如使用最新的版本的编程语言和框架,以获得更好的安全性。

需要注意的是,防范跨站脚本攻击需要综合多种方法,单一的措施并不能完全防止攻击。此外,开发人员应该始终关注最新的安全漏洞和攻击技术,及时采取相应的防范措施。

网页验证码是干嘛的,是为了解决什么安全问题?

加密基础概念

  1. 对称加密
    • 同一密钥加解密
    • 速度快
    • 如:AES、DES
  2. 非对称加密
    • 公钥加密,私钥解密
    • 速度慢
    • 如:RSA、ECC
  3. 哈希算法
    • 单向加密
    • 如:MD5、SHA

中间人攻击?

中间人攻击(Man-in-the-Middle Attack, MITM),也称中间攻击,是指黑客通过拦截通信过程中的数据,然后在两个通信的用户之间进行欺骗和篡改的攻击方式。在 HTTPS 中,如果黑客能够截获用户和服务器之间的通信,那么他就可以使用类似于伪造证书、中断连接、插入恶意代码等方式,对数据进行篡改或窃取用户敏感信息。

为了防止中间人攻击,在 HTTPS 中通常采用数字证书认证机制,即服务器会向可信的第三方机构申请数字证书,证明其身份的真实性。当用户访问该服务器时,服务器会把自己的数字证书发送给用户,用户的浏览器会验证该证书是否由可信的第三方机构签发,是否过期等,如果验证通过,则可以建立安全的 HTTPS 连接。如果数字证书无效,则会弹出警告页面,提示用户存在安全风险。

前端如何防止加载外域脚本?

前端可以通过以下方式防止加载外域脚本:

  1. 使用 Content Security Policy (CSP):CSP 是一个 HTTP 头,可以限制页面可以从哪些源加载资源。通过 CSP,可以禁止加载外域脚本,从而防止 XSS 攻击等安全问题。

  2. 使用 Subresource Integrity (SRI):SRI 是一个浏览器功能,可以确保在加载外部资源时,它们的内容没有被篡改过。通过在 script 标签中添加 integrity 属性,可以指定资源的校验和,浏览器会校验资源是否与 integrity 值匹配,从而确保资源没有被篡改过。

  3. 避免使用动态脚本加载:使用 document.createElement('script') 创建 script 元素,并手动设置其 src 属性,可以避免使用 eval() 动态执行脚本。动态加载脚本的方式可能会受到中间人攻击,从而加载恶意脚本。

  4. 避免使用不安全的协议加载资源:使用 HTTPS 加载资源可以确保资源在传输过程中不会被篡改。避免使用 HTTP 或者 file 协议加载资源,这些协议容易受到中间人攻击。

综上,前端可以通过以上方式防止加载外域脚本,提高应用程序的安全性。

中间人攻击是什么?

  • created_at: 2023-03-26T09:29:08Z
  • updated_at: 2023-03-26T09:29:09Z
  • labels: 网络
  • milestone: 高

中间人攻击(Man-in-the-Middle Attack, MITM),也称中间攻击,是指黑客通过拦截通信过程中的数据,然后在两个通信的用户之间进行欺骗和篡改的攻击方式。在 HTTPS 中,如果黑客能够截获用户和服务器之间的通信,那么他就可以使用类似于伪造证书、中断连接、插入恶意代码等方式,对数据进行篡改或窃取用户敏感信息。

为了防止中间人攻击,在 HTTPS 中通常采用数字证书认证机制,即服务器会向可信的第三方机构申请数字证书,证明其身份的真实性。当用户访问该服务器时,服务器会把自己的数字证书发送给用户,用户的浏览器会验证该证书是否由可信的第三方机构签发,是否过期等,如果验证通过,则可以建立安全的 HTTPS 连接。如果数字证书无效,则会弹出警告页面,提示用户存在安全风险。

参考资料

22%