样式=“显示:无”的输入元素上的 XSS

信息安全 xss javascript
2021-09-05 23:43:21

假设在属性设置为的input标记中只允许使用用户提供的双引号styledisplay: none

像这样的东西:

<input type="text" style="display: none;" value="aa" autofocus/onfocus="prompt(1)">

既然注入点在style属性后面,那么是否还可以通过触发事件处理程序来获取XSS呢?

2个回答

您始终可以使用可能用于隐藏输入的相同方法,但这需要相当多的社会工程,因为它很难触发。

但是,您可以使用可能更容易触发的不同事件属性。oninvalid想到它不需要显示元素:

<form>
<input type="text" style="display: none;" value="aa" oninvalid="alert(1)" pattern="b">
<input type="submit" value="Submit">
</form>

与前面提到的类似accesskey,您可以onclick使用元素来触发隐藏label元素。

当您单击 时<label for="some-id">,浏览器将查找具有该元素的第一个输入并执行单击,即使隐藏。此功能的一个合法用例是复选框/无线电输入,其中标签用于指示状态,例如此站点的电子邮件设置页面上的频率选择器。

想象一下,你有一个看起来像这样的表格:

<input type="text" style="display:none" value="" onclick="alert(1)">
<label for="field">Name</label>
<input type="text" id="field">

该值" id="field将导致页面如下所示:

<input type="text" style="display:none" value="" id="field" onclick="alert(1)">
<label for="field">Name</label>
<input type="text" id="field">

如果用户单击“名称”,您将收到警报。用户点击标签的频率取决于很多事情,但某些网站设计可能需要点击标签才能完成给定的任务。

这也严重依赖于页面排序。隐藏输入相对于合法输入的位置很重要,隐藏输入是否具有 id 以及它相对于值的位置。