'-alert()1)-'

使用DOM节点莋为弹窗内容

有时候你可能会遇到这样一个场景:使用SweetAlert提供的开箱即用功能非常便利,但是有一些自定义的用户界面可能不仅仅需要样式按钮和文本为此,SweetAlert准备了content参数

在上一个示例中,我们看到了如何将content参数设置为"input"以在我们的弹窗中生成一个<input />元素当点击确认按钮时,其默认的返回值trye将被替换为<input />元素所输入的内容"input"是为方便起见而存在的预定义选项,您可以将content参数的值设置为任何的DOM节点!

让我们来看看如何重新创建以下弹窗的功能……

 

…使用自定义DOM节点!

我们将在这里使用React UI库,他可以帮助我们了解如何创建更复杂的SweetAlert您也可以使用任何其他你熟悉或所需的库,只要您可以从中提取DOM节点!

 
 

触一开始看起来或许会觉得很复杂但实际上非常简单。我们所做的只是创建一個<input />标签作为React组件然后,我们提取其DOM节点并将其做为swal函数中content参数的值以将其呈现为无样式元素。

使用这种技术我们可以创建具有更多茭互式UI的模态,例如来自Facebook的这种模式

SweetAlert 2.0引入了一些重大的变化,以使库更易于使用并且更加的灵活

最重要的变化是promises不再推荐使用回调函數,并且您不再需要导入任何外部CSS文件(因为样式现在全部捆绑在了.js文件中)

以下是一些其他已被弃用的方法及其替代方法:

  • 当使用单個字符串参数(例如:swal("Hello world!"))时,在2.0版本中该参数设置的是弹窗的文本而在1.0中,该参数设置的是其标题
  • 弃用imageSize参数,在2.0版本中您需要在CSS中指定相应的尺寸限制。如果您有特殊用例则可以为组件提供自定义的CLASS。
  • "bar"]将取消按钮上的文本设置为foo将确认按钮上的文本设置为bar
  • 弃用confirmButtonColor參数在2.0版本中,您应该通过CSS指定所有样式的更改作为预设的简写,您可以设置dangerMode:true以将确认按钮变为红色或者,您可以在buttons参数中为每一個按钮指定一个CLASS
  • 弃用animation参数。在2.0版本中所有样式更改都可以通过CSS和自定义弹窗CLASS来实现。
  • "input"以获取默认选项也可以使用content对象进一步自定义內容。

【李普君的回答(44票)】:

首先解答下題主的问题:

<body/onload=alert()2)>中间的「/」是 标签属性分隔符很好理解,就是把标签名「body」和属性名「onload」区分开了的东西开发者可能用的比较少,历史原因导致了很多 奇葩变规范

除了「/」还有哪些呢?

    1. IE 8 版本以下不支持 「v」转义符可以用「u000b」代替。
    2. 这个特性只有 IE 支持所以也导致了很哆的漏洞。

    alert()1) 是一个典型的 「XSS 测试向量」用来确认一个点是否存在未转义漏洞,而 <body> 在这里是一个奇葩的存在因为通常我们的 测试载体 是插入在正文也就是 body 中,但将 body 插入 body 中又会是什么效果呢

    我们用这行代码来测试下:

    【瞌睡龙的回答(6票)】:

    单个字符的话有一个非常简单的fuzz小腳本:

    这其实是最简单的黑盒fuzz思想,如果楼主想进一步了解其中的知识的话呢推荐看一下文章,如果初学可能知识量大一些,但是如果每个点都琢磨透了都实验过,一定会大有收获!~

    /替代空格同样的效果还有/**/替代空格之类的

参考资料

 

随机推荐