寫PHP的一些安全性問題

怕自己忘記,隨手筆記一下:

.php.ini 中的 register_globals = off;

如果不能改變php.ini的話,可以利用下面的code

if(ini_get('register_globals')){
   foreach($GLOBALS as $key=>$val){
      if(!in_array($key,array('GLOBALS','_POST','_GET','_COOKIE','_SERVER','_FILES','wind_in'))){
         ${$key}='';
      }
   }
}

或是

if ((isset($_REQUEST['GLOBALS'])

       OR isset($_FILES['GLOBALS']))

       AND ini_get('register_globals')) {

        die(globals overwrite attempted.);

 }

.error_reporting(0);

.防止上傳的檔案執行,在http.conf加上

<Directory "/home/www/upload">
AllowOverride None
php_flag engine off
Allow from all
</Directory>

或是在上傳的目錄下增加 .htaccess

RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off 

 

1. SQL 注入攻擊 (SQL injection attack)
mysql_real_escape_string
2. 操縱 GET 的值 (manipulating GET variables)
is_numeric 、 regular expression(ereg(“^[0-9]+$”)
3. 緩衝器溢位攻擊 (buffer overflow attack)
前端 maxlength 、strlen 、 substr
4. 跨站腳本攻擊 (cross-site scripting)
strip_tags 、 htmlspecialchars
5. 操縱瀏覽器內的資料 (manipulating data inside the browser)
假設Tamper Data
6. 遠程表格遞交 (remote form posting)
random token(md5、uniqid、rand)