首页 > 其他分享 >XSS案例分析和规避

XSS案例分析和规避

时间:2024-10-29 22:11:15浏览次数:4  
标签:httpRequest XSS 规避 案例 html var news document id

1. 什么是XSS

跨站脚本(XSS)是一种安全漏洞,允许攻击者向网站注入恶意客户端代码。该代码由受害者执行从而让攻击者绕过访问控制并冒充用户。XSS可能导致cookie、token等用户敏感信息被窃取,或者HTML被重写。
下面是一个极简易的新闻发布功能的案例,前端获取用户输入的标题和新闻内容,服务端接收并保存。用户点击新闻标题列表时将id传给服务端,服务端根据id找到标题和内容,再拼接成html格式的内容发给前端,前端直接输出到页面。
2. 案例代码

前端代码,从input获取新闻标题和内容通过ajax发给服务端

<head>
    <meta charset="UTF-8">
    <title>发布新闻</title>
    <script>
        function add() {
            var title = document.getElementById("txtTitle").value;
            var content = document.getElementById("txtContent").value;
            var httpRequest = new XMLHttpRequest()
            httpRequest.onreadystatechange = function () {
                if (httpRequest.readyState == 4 && httpRequest.status == 200) {
                    document.getElementById("txtTitle").value = ''
                    document.getElementById("txtContent").value = ''
                    alert('添加成功')
                }
            }
            httpRequest.open('POST', 'http://localhost:8093/news', true)
            httpRequest.setRequestHeader(
                'Content-type',
                'application/x-www-form-urlencoded'
            )
            var str = `title=${title}&content=${content}`
            httpRequest.send(str)
        }
</script>
</head>
<body>
<div>
    标题:<input style="width: 280px;" type="text" name="title" id="txtTitle"> <br>
    内容:<textarea name="content" id="txtContent" cols="40" rows="6"></textarea><br>
    <input type="button" onclick="add()" value="新增">
</div>
View Code

 

服务端保存(java),问题点1:保存没有检查数据格式

@PostMapping
public int add(News news) {
    int num = jdbcTemplate.update("insert into tb_news(id,title,content) values(?,?,?)", new Object[]{UUID.randomUUID().toString(), news.getTitle(), news.getContent()});
    return num;
}
View Code

 

服务端生成html返回

@GetMapping("/{id}")
public String getNews(@PathVariable String id) {
    News news = jdbcTemplate.queryForObject("select * from tb_news where id = ?", new BeanPropertyRowMapper<>(News.class), id);
    String html = getTemplate();
    html = html.replace("@title", news.getTitle());
    html = html.replace("@content", news.getContent());
    return html;
}
private String getTemplate() {
    String template = "<html>\n" + "<head>\n" + "    <title>news</title>\n" + "    <meta charset=\"utf-8\">\n" + "</head>\n" + "<body>\n" + "<div style=\"margin: 100px 100px 100px 100px\">\n" + "    <h2 style=\"text-align: center;\">@title</h2>\n" + "    <p>@content</p>\n" + "</div>\n" + "</body>\n" + "</html>";
    return template;
}
View Code

前端展示新闻列表

window.onload = function () {
    var httpRequest = new XMLHttpRequest()
    httpRequest.onreadystatechange = function () {
        if (httpRequest.readyState == 4 && httpRequest.status == 200) {
            var news = JSON.parse(httpRequest.responseText)
            for (var i = 0; i < news.length; i++) {
                showNews(news[i])
            }
        }
    }
    httpRequest.open('GET', 'http://localhost:8093/news', true)
    httpRequest.send()
}
//新闻列表
function showNews(news) {
    var li = document.createElement("li");
    li.innerHTML = `<a href="javascript:view('${news.id}')">${news.title}</a>`;
    document.getElementById("news").append(li);
}
View Code

前端展示新闻详情,问题点2:用document.write输出

//从服务端获取新闻内容展示到页面
function view(id) {
    var httpRequest = new XMLHttpRequest()
    httpRequest.onreadystatechange = function () {
        if (httpRequest.readyState == 4 && httpRequest.status == 200) {
            //演示xss
            document.write(httpRequest.responseText)
    }
    httpRequest.open('GET', `http://localhost:8093/news/${id}`, true)
    httpRequest.send()
}
View Code

演示弹出alter消息

 

 

演示效跳转网站

 

 

标签:httpRequest,XSS,规避,案例,html,var,news,document,id
From: https://www.cnblogs.com/cy2011/p/18513693

相关文章

  • KingbaseES V8R6集群部署案例之---install.conf配置错误
    案例说明:KingbaseESV8R6集群在通过脚本部署时,提示节点无法通过securcmdd连接,部署失败。适用版本:KingbaseESV8R6一、问题现象如下所示,在执行脚本部署时,提示无法和集群节点通过8890端口建立连接:二、问题分析1、测试节点securecmdd互信连接如下所示,节点之间securecmdd......
  • 前端防止XSS跨站脚本攻击处理(DOMPurify)
      在项目中碰到安全部门测试,输入一段脚本'<iframesrcdoc="<script>alert('xss]</script></iframe>">','<p>TestXSS<imgsrc=Xonerror=prompt(123423423423)>123123ff</p>',然后就会出现弹窗,针对于这种情况,初始情况涉及地方不多可......
  • CesiumJS 案例 P11:添加图片图层异常、添加标记、添加标记并指定大小、添加标记并指定
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、添加图片图层异常<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/>......
  • CesiumJS 案例 P10:带边框的图片图层(Entity polyline 实现、Entity polygon 实现、Enti
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、带边框的图片图层(Entitypolyline)<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="U......
  • c++ 异常处理案例自行分析
    19.5异常变量的声明周期classMyException{public:  MyException() {    cout<<"异常变量构造!"<<endl; };    MyException(constMyException&e) {    cout<<"拷贝构造"<<endl; }    /......
  • Mybatis快速入门(一个案例带你入门mybatis)
     mybatis是一款持久层框架,主要用于简化jdbc(java语言中用于操作关系型数据库的一套api,不懂的可以看我上一篇文章)。既然是用来操作数据库的,那么我就以查询一个数据表中的数据为案例来入门mybatis。要想查询数据表中的数据就得先有数据,所以我就先来创建一个数据表。创建数据表......
  • Python100个案例源码(基础应用,网络爬虫,数据分析与图表,文件、系统、图形与多媒体,办公自
    Python100个案例源码点我下载此资源部分示例模拟迷宫地图的二维列表map_list=[["“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“......
  • 基于案例分析 MySQL 权限认证中的具体优先原则
    在MySQL的日常管理过程中,大家或多或少会遇到权限认证相关的问题。例如,本来能够正常执行的操作,可能在新增一个账号或授权后就突然失败了。这种现象往往让人误以为是bug,但很多时候,其实并不是。下面,将通过两个案例来阐明MySQL权限认证中的具体优先原则,并在此基础上,分析以下问......
  • 构建数据安全的钢铁长城:500强企业案例分析
    飞驰云联作为一家企业数据安全交换解决方案提供商,长期专注于安全可控、性能卓越的数据传输技术和解决方案,公司产品和方案覆盖跨网跨区域的数据安全交换、供应链数据安全传输、数据传输过程的防泄漏、FTP的增强和国产化替代、文件传输自动化和传输集成等各种数据传输场景。特推出《......
  • python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)
    文章目录1、任务目标2、网页分析3、代码编写1、任务目标目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_source=e8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验要求:抓取该网址下的视频,将其存入本地,如下:2、网页分析在分析网页前,我们需要明白......