当前位置:  开发笔记 > 编程语言 > 正文

XSS - 哪些HTML标记和属性可以触发Javascript事件?

如何解决《XSS-哪些HTML标记和属性可以触发Javascript事件?》经验,为你挑选了1个好方法。

我正在尝试编写一个安全且轻量级的基于白名单的HTML净化器,它将使用DOMDocument.为了避免不必要的复杂性,我愿意做出以下妥协:

HTML评论已删除

scriptstyle标签一起被剥离

body返回标记的子节点

可以触发Javascript事件的所有HTML属性都将被验证或删除

我一直在阅读关于XSS攻击和预防的很多内容,我希望我不是太天真(如果我,请让我知道!)假设如果我遵循上面提到的所有规则,我将会从XSS安全.

问题是除了默认的Javascript事件属性之外,我不确定其他标签和属性(在任何[X] HTML版本和/或浏览器版本/实现中)可以触发Javascript事件:

onAbort

onBlur

onChange

onClick

onDblClick

onDragDrop

onError

onFocus

onKeyDown

onKeyPress

onKeyUp

onLoad

onMouseDown

onMouseMove

onMouseOut

onMouseOver

onMouseUp

onMove

onReset

onResize

onSelect

onSubmit

onUnload

是否有任何其他非默认或专有事件属性可以触发Javascript(或VBScript等)事件或代码执行?我能想到的href,style并且action,例如:

XSS // or
XSS // or

我可能只是删除styleHTML标记中的任何属性,action并且href属性构成了更大的挑战,但我认为以下代码足以确保它们的值是相对或绝对URL而不是一些讨厌的Javascript代码:

$value = $attribute->value;

if ((strpos($value, ':') !== false) && (preg_match('~^(?:(?:s?f|ht)tps?|mailto):~i', $value) == 0))
{
    $node->removeAttributeNode($attribute);
}

所以,我的两个显而易见的问题是:

    我错过了任何可以触发事件的标签或属性吗?

    是否存在这些规则未涵盖的攻击媒介?


经过大量的测试,思考和研究后,我提出了以下(相当简单的)实现,它似乎对我可以抛出的任何XSS攻击向量免疫.

我非常感谢您所有有价值的答案,谢谢.



1> Mike Samuel..:

你提到hrefaction作为地方javascript:的URL可以显示,但你错过了src一堆其他的URL加载属性之间的属性.

OWASP Java HTMLPolicyBuilder的第399行是白名单HTML清理程序中URL属性的定义.

private static final Set URL_ATTRIBUTE_NAMES = ImmutableSet.of(
  "action", "archive", "background", "cite", "classid", "codebase", "data",
  "dsync", "formaction", "href", "icon", "longdesc", "manifest", "poster",
  "profile", "src", "usemap");

在HTML5指数包含的属性类型的摘要.它没有提到一些有条件的事情,但如果你扫描该列表中的有效URL和朋友,你应该对HTML5添加的内容有所了解.具有类型的HTML 4属性集%URI也是提供信息的.

您的协议白名单看起来非常类似于OWASP清洁剂.添加ftp并且sftp看起来非常无害.

HTML元素和属性的安全相关模式信息的良好来源是Caja JS HTML清理程序使用的Caja JSON白名单.

您打算如何渲染生成的DOM?如果你不小心,那么即使你删除所有

有错误的渲染器可能会将其内容输出为:


它包含一个脚本元素.

(完全披露:我写了上面提到的两种HTML消毒剂的块.)

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有