close

如果你習慣在FORM傳遞資料時用PHP_SELF,那就必須注意Cross-site scripting attacks的問題!!

 

一般在寫  FORM 時,習慣都會在 傳址網頁寫  
action=$_SERVER['PHP_SELF'] 
但是有時這將導致XSS的漏洞攻擊,簡單說明如下。

  假設此為 test.php 內容:
  <form action="<?=$_SERVER['PHP_SELF'];?>">
   <input type="submit" 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"> 
當然是更安全,不過就喪失程式設計的通用性了,見仁見智,看個人習慣吧!!

 

arrow
arrow
    全站熱搜

    BlackHawk 發表在 痞客邦 留言(0) 人氣()