PHP安全笔记
1、?????????? Magic Quotes選項
PHP.INI中中有三個以magic_quotes_開頭的選項 magic_quotes_gpc如果是On的話,就會自動用‘\’轉義從GET,POST,COOKIE來的數據,這是為什么我們想在URL中輸入' ; show tables;--有時候失敗的原因,因為被轉義了唄 magic_quotes_runtime如果是on,會自動轉義來自數據庫或字符串中數據magic_quotes_sybase會用單引號代替反斜杠來轉義 我們可以使用addslashes函數來達到同樣目的,不過有時候得用stripslashes來取消轉義哦2、?????????? PHP的命令執行函數
a)????? system:執行一個外部的應用程序并顯示輸出的結果
b)????? exec:執行一個外部的應用程序
c)?????? passthru:執行一個UNIX系統命令并返回原始的輸出
d)????? shell_exec:執行shell命令并返回輸出的字符串
e)????? "``"運算符:與shell_exec功能相同
system舉例-列出C盤內容: <?phpecho "<pre>";$last_line = system("dir c:", $retval);echo "</pre>";echo "命令輸出的最后一行:" . $last_line . "<br />";echo "命令的返回值:" . $retval;?> exec執行外部應用程序-列出C盤內容: <?php$output = array();echo "<pre>";$last_line = exec("dir c:", $output);echo "</pre>";while(list($key, $value) = each($output)){echo $value . "<br />";}echo "命令輸出的最后一行:" . $last_line . "<br />"; echo "命令的返回值:" . $retval;?> string shell_exec( string cmd ) <?phpecho "<pre>";$output = shell_exec("dir c:");echo "</pre>";echo nl2br($output) . "<br />";?> <?phpecho "<pre>";$output = `dir c:`;echo "</pre>";echo nl2br($output) . "<br />";?>3、?????????? EVAL函數攻擊
下面的例子我換參數為system("dir c:");,執行失敗了,是因為我的php.ini中 ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On 這句話導致system括號里的雙引號被轉義,導致執行失敗 <?php$myvar = "varname";if (isset($_GET["arg"])){$arg = $_GET["arg"];//arg參數可以替換成system造成命令注入攻擊eval("\$myvar = $arg;");//eval 能夠執行里面的字符串的PHP代碼echo "\$myvar = " . $myvar;}?>4、?????????? 防范命令注入攻擊和EVAL注入攻擊的方法
使用函數 escateshellarg 函數過濾傳來的字符串參數即可5、?????????? 客戶端腳本攻擊-SQL Insertion
客戶端腳本攻擊,就是用戶在留言板框內輸入js腳本,然后別人就中招了 解決方法就是HTML輸出過濾 在PHP中有兩種方法可以進行HTML輸出過濾: l? 使用strip_tags來刪除字符串中的PHP和HTML標簽 l? 使用 htmlspecialchars函數來講特殊字符轉換成HTML編碼,而不是執行,這是解決該問題的最佳方法 l? 跨網站腳本攻擊XSS解決方法 很簡單,仍然使用htmlspecialchars將來自URL的參數過濾一下即可,這樣不讓來自URL的js代碼執行就OK 如果在表單中用的是action=$_SERVER['PHP_SELF']或者action=$SCRIPT_NAME的時候,會被XSS注入,解決方法: 在action后面的URL加上htmlspecialchars過濾 action寫成空,即action=''默認是提交到自身頁面的,所以沒必要,該情況用于表單是自身處理的情況6、?????????? SQL注入攻擊的防御方法:
a)????? 如果確定是整數,用intval過濾參數
b)????? 如果確定是浮點數,用floatval或doubleval函數過濾
c)?????? 如果是字符串,則用addslashes函數將單引號,雙引號,反斜杠,NULL等字符轉義
請注意,PHP.INI中的magic_quotes_gpc如果為ON,那么字符串中引號等會被自動加上反斜杠轉義,那么如果我們再加上addslashes函數就會有了兩個反斜杠,使得SQL語句中出現了一個反斜杠后被執行,會出錯誤的。 解決方法,使用get_magic_quotes_gpc判斷是不是將該值設置為ON了,如果是ON返回1,如果offf返回0轉載于:https://www.cnblogs.com/crazyant/archive/2011/02/23/2823910.html
總結
- 上一篇: 17款开源论坛系统/Forum Soft
- 下一篇: php中时间轴开发,即显示为“刚刚”、“