PHP-安 全 使 用 篇
小心$_SERVER['PHP_SELF]使用漏洞
如果你習慣在FORM傳遞資料時用PHP_SELF,那就必須注意Cross-site scripting attacks的問題!!
如果你習慣在FORM傳遞資料時用PHP_SELF,那就必須注意Cross-site scripting attacks的問題!!
一般在寫 FORM 時,習慣都會在 傳址網頁寫
action=$_SERVER['PHP_SELF']
但是有時這將導致XSS的漏洞攻擊,簡單說明如下。
假設此為 test.php 內容:
<form action="<?=$_SERVER['PHP_SELF'];?>">
<input value="Submit!">
</form>
如果輸入者在網址列搞花樣
test.php/%22%3E%3Cscript%3Ealert('Hello,word')%3C/script%3E
結果會變成下面的狀態
<form action="test.php/"><script>alert('xss')</script>"
就這樣可以把 script 勘入搞花樣了,最安全的方式還是要將任何外部引用資料做檢查及安全處理($_GET,$_POST,$_COOKIE等)
最簡單的方式就是 htmlentities
所以應該如下才是安全的寫法
<form action="<?=htmlentities($_SERVER['PHP_SELF']); ?>">
當然,你直接寫成
<form action="test.php">
當然是更安全,不過就喪失程式設計的通用性了,見仁見智,看個人習慣吧!!