input
属性がdisplay: none
に設定されているstyle
タグでは、ユーザー指定の二重引用符のみが許可されているとします。
このようなもの:
<input type="text" style="display: none;" value="aa" autofocus/onfocus="Prompt(1)">
インジェクションポイントはスタイル属性の背後にあるので、イベントハンドラーをトリガーしてXSSを取得することはまだ可能ですか?
hidden input に使用できるのと同じアプローチをいつでも使用できますが、トリガーするのが難しいため、これにはかなりのソーシャルエンジニアリングが必要です。
ただし、トリガーしやすい別のイベント属性を使用できます。 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">
をクリックすると、ブラウザーはfirst入力をその要素で探し、非表示であってもクリックを実行します。この機能の正当な使用例は、ラベルが状態を示すために使用されているチェックボックス/ラジオ入力です このサイトのメール設定ページ の周波数セレクターのように。
次のようなフォームがあるとします。
<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があるかどうか、および値との相対的な関係が重要です。