# Cross-site scripting Lab20
本題是 Stored XSS in onclick event handler,嘗試觸發 alert。
一樣先進入網站。

送出表單並查看原始碼。


這裡隨意輸入各種符號可知:
- 在 Website 欄位填的內容會被放進 HTML 裡的 onclick="..."。
- `<` `>` `"` 都會變成 `<` `>` `"`
- `'` 和 `\` 會變成 `\'`,也就是前面加跳脫
由於沒辦法打破 `onclick="..."` 的雙引號,也沒辦法用 `<script>`,但可以利用 JavaScript URL:
```
http://foo?'-alert(1)-'
```
攻擊原理解析:
Website 欄位內容最終會被當作 `href` 的值,例如:
```
<a href="http://foo?'-alert(1)-'" onclick="...">
```
因為整個內容是放進 `onclick="..."` 裡面,而你的 payload 被插進來後長這樣:
```
<a onclick="somecode('http://foo?'-alert(1)-'')">
```
但實際上單引號被跳脫變成 `\'`,所以這裡我們主動放入一些符號來平衡與關閉字串結構:
`'` → HTML 的單引號。
`'-alert(1)-'` → 假設 onclick 內部是這樣處理字串會導致執行 alert。
整段 JavaScript 最終變成:
```
someFunction('http://foo?'-alert(1)-'')
```
而這樣會變成語法錯誤並導致解析器執行 alert(1)。


---