首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >网络安全——XSS之被我们忽视的Cookie

网络安全——XSS之被我们忽视的Cookie

原创
作者头像
Jack20
发布2025-05-11 20:01:33
发布2025-05-11 20:01:33
5320
举报

1.1 XSS 跨站脚本攻击介绍

跨站脚本攻击英文全称为(Cross site Script)缩写为 CSS,但是为了和层叠样式表(Cascading Style Sheet)CSS 区分开来,所以在安全领域跨站脚本攻击叫做 XSS(官方解释)

XSS 攻击简介

XSS 攻击通常指黑客通过往 Web 页面中插入恶意 Script 代码,当用户访问网页时恶意代码在用户的浏览器中被执行,从而劫持用户浏览器窃取用户信息。

1.2 XSS 跨站脚本攻击分类

XSS(Cross-Site Scripting)跨站脚本攻击是一种常见的网络安全漏洞,以下是其相关介绍:

定义

XSS攻击是指攻击者通过在目标网站中注入恶意脚本,使用户在访问该网站时执行这些恶意脚本,从而达到窃取用户信息、破坏网站内容、传播恶意软件等目的。

攻击类型

  • 反射型XSS:攻击者构造包含恶意脚本的URL,通过钓鱼邮件、弹窗链接等方式诱导用户点击,当用户访问该URL时,服务器将恶意脚本反射回用户浏览器执行。这种攻击方式需要用户点击特定链接才能触发,通常也称为非持久型跨站脚本攻击。
  • 存储型XSS:攻击者将恶意脚本提交到网站的数据库、内存或文件系统等存储介质中,当用户访问包含该恶意脚本的页面时,脚本会自动执行。这种攻击方式不需要用户点击特定链接,只要访问了受感染的页面就会触发,通常也称为持久型跨站脚本攻击,常见于论坛、博客、留言板等允许用户共享内容的网站。
  • 基于DOM的XSS:攻击者通过篡改DOM(Document Object Model,文档对象模型)注入恶意脚本。在网页加载时,浏览器会创建页面的DOM,攻击者利用DOM对象的属性或方法将恶意脚本注入其中,当用户与页面进行交互或满足特定条件时,恶意脚本会被执行。整个攻击过程均在用户侧浏览器执行,无需Web服务器端进行解析和响应访问请求。

攻击手段

  • 盗用Cookie:恶意脚本可以读取用户浏览器中的Cookie信息,包括用户的登录凭证、个人信息等,从而冒充用户进行登录或执行其他敏感操作。
  • 破坏页面结构:通过修改网页的DOM结构,恶意脚本可以改变页面的布局、内容或样式,影响用户的正常浏览体验,甚至可能导致页面无法正常显示。
  • 流量劫持:攻击者可以利用恶意脚本将用户的流量引导到恶意网站,进行广告欺诈、恶意软件传播等活动。
  • 挂马:在网页中植入恶意软件或恶意链接,当用户访问该网页时,自动下载并执行恶意软件,或者诱导用户点击恶意链接,从而进一步感染用户的设备。
  • 执行恶意操作:以用户的身份执行一些管理动作,如发微博、加好友、发私信等,或者进行不当的投票活动等。

防御方法

  • 输入验证和过滤:对用户输入的内容进行严格的验证和过滤,确保输入符合预期的格式和要求,<tiangong type="reference" index="1-8">过滤掉一些特殊字符和标签,如<script><img>等,防止恶意脚本的注入</tiangong>。
  • 输出编码和转义:在将用户输入的内容输出到网页之前,对其进行编码和转义,将特殊字符转换为实体字符,如将<转换为&lt;,将>转换为&gt;,使浏览器将其作为普通文本而不是可执行代码进行处理。
  • 使用安全的编程实践:遵循安全的编程规范和最佳实践,避免在代码中出现可能导致XSS漏洞的错误,如使用安全的API、避免使用eval()等危险函数、对用户输入进行严格的类型检查等。
  • 设置HttpOnly Cookie:将重要的Cookie标记为HttpOnly,这样在JavaScript脚本中就无法访问这些Cookie,从而防止XSS攻击利用JavaScript获取Cookie信息。
  • 实施内容安全策略(CSP):通过设置Content-Security-Policy头信息或使用<meta>标签,限制网站可以加载和执行的外部资源,如禁止加载外域代码、禁止内联脚本执行等,从而防止恶意脚本的注入和执行。
  • 定期进行安全测试和漏洞扫描:使用专业的安全测试工具和服务,定期对网站进行安全测试和漏洞扫描,及时发现并修复存在的XSS漏洞。

1.3 Cookie 概述

(1、Cookie 概述:

Cookie 是一些数据,存储于你电脑上的文本文件中。

当web服务器向浏览器发送web页面时,在连接关闭后,服务端不会记录用户的信息。

Cookie的作用就是用于解决“如何记录客户端的用户信息":

(1)、当用户访问web页面时,他的名字可以记录在cookie 中。

(2)、在用户下一-次访问该页面时,可以在cookie 中读取用户访问记录里

Cookie以键值对形式存储,如下所示:

username= Jack20

当浏览器从服务器.上请求web页面时,属 于该页面的cookie 会被添加到该请求中。服务端通过这种方式来获取用户的信息。

(2、使用JavaScript 创建Cookie

JavaScript可以使用document.cookie属性来创建、读取、及删除cookie。

例1: JavaScript中,创建cookie 如下所示:

document.cookie= "username=Jack20";

例2:你还可以为cookie 添加一个过期时间(以UTC或GMT时间)默认情况下,cookie 在浏览器关闭时删除:

document.cookie= "username=Jack20; expires=Wed, 26 July 2028 12:00:00 GMT";

(3、使用JavaScript读取Cookie

在JavaScript中,可以使用以下代码来读取cookie: 4

var x = document.cookie;

注: document.cookie将以字符串的方式返回所有的cookie,类型格式: cookie1 =value;cookie2 =value; cookie3= value;

(4、使用JavaScript 修改Cookie

在JavaScript 中,修改cookie类似于创建cookie, 如下所示:

document.cookie= "username= Jack; expires=Wed, 26 July 2028 12:00:00 GMT;path=/";

旧的cookie 将被覆盖。

(5、Cookie字符串

document.cookie属性看起来像一个普通的文本字符串,其实它不是。

(6、JavaScript Cookie 实例

实验描述:在以下实例中,我们将创建 cookie 来存储访问者名称。

首先,访问者访问 web 页面, 他将被要求填写自己的名字。该名字会存储在 cookie 中。访问者下一次访问页面时,他会看到一个欢迎的消息。

在 kali 打开终端(这里在虚拟机里装了Kali2020.2),先启动 apache 服务,然后新建 一个html 页面

写入如下代码:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>js_cookie 实例</title>
</head>
<head>
    <script>
        function setCookie(cname, cvalue, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            var expires = "expires=" + d.toGMTString();
            document.cookie = cname + "=" + cvalue + "; " + expires;
        }
        function getCookie(cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i].trim();
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        }
        function checkCookie() {
            var user = getCookie("username");
            if (user != "") {
                alert("欢迎 " + user + " 再次访问");
            } else {
                user = prompt("请输入你的名字:", "");
                if (user != "" && user != null) {
                    setCookie("username", user, 30);
                }
            }
        }
    </script>
</head>
<body onload="checkCookie()"></body>
</html>

在本地浏览器测试一下:

第一次访问,服务器里没有任何Cookie数据,提示输入名字,输入Jack20,然后点击确定,然后再次刷新页面

刷新后,自动登录并提示 欢迎 Jack20 再次访问。这是服务器里多了一条Cookie数据

原理分析:第一次访问的时候,检查 cookie 中是否有存储用户名,如果没有提示输入名字,如果有提示“欢迎 xxxx 再次访问”,如果 cookie 中没有存储用户名,输入名字点击确定后,名字将会被存储在 cookie 中,再次刷新页面的时候,将会从 cookie 中读取到名字,并在页面中弹出提示框显示“欢迎 xxxx 再次访问”。

(7、Cookie的安全问题

  • 1.Cookie欺骗
  • 2.Flash的代码隐患

所以,平时我们去访问一些来路不明的网站,在填写信息时一定要看清楚,防止重要信息泄露

以上内容仅供学习研究使用,请勿用于非法用途。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 XSS 跨站脚本攻击介绍
  • 1.2 XSS 跨站脚本攻击分类
    • 定义
    • 攻击类型
    • 攻击手段
    • 防御方法
  • 1.3 Cookie 概述
    • (1、Cookie 概述:
    • (2、使用JavaScript 创建Cookie
    • (3、使用JavaScript读取Cookie
    • (4、使用JavaScript 修改Cookie
    • (5、Cookie字符串
    • (6、JavaScript Cookie 实例
    • (7、Cookie的安全问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档