PHP安全之文件系統(tǒng)安全——Null字符問題
由于 PHP 的文件系統(tǒng)操作是基于 C 語言的函數(shù)的,所以它可能會(huì)以您意想不到的方式處理 Null 字符。 Null字符在 C 語言中用于標(biāo)識(shí)字符串結(jié)束,一個(gè)完整的字符串是從其開頭到遇見 Null 字符為止。 以下代碼演示了類似的攻擊:
Example #1 會(huì)被 Null 字符問題攻擊的代碼
<?php $file = $_GET[’file’]; // '../../etc/passwd0' if (file_exists(’/home/wwwrun/’.$file.’.php’)) {// 文件/home/wwwrun/../../etc/passwd存在的話那么file_exists方法會(huì)返回trueinclude ’/home/wwwrun/’.$file.’.php’;// the file /etc/passwd will be included }?>
因此,任何用于操作文件系統(tǒng)的字符串(特別是程序外部輸入的字符串)都必須經(jīng)過適當(dāng)?shù)臋z查。以下是上述例子的改進(jìn)版本:
Example #2 驗(yàn)證輸入的正確做法
<?php $file = $_GET[’file’]; // 對(duì)字符串進(jìn)行白名單檢查 switch ($file) {case ’main’:case ’foo’:case ’bar’: include ’/home/wwwrun/include/’.$file.’.php’; break;default: include ’/home/wwwrun/include/main.php’; }?>
相關(guān)文章:
1. HTML <!DOCTYPE> 標(biāo)簽2. asp批量添加修改刪除操作示例代碼3. 詳解盒子端CSS動(dòng)畫性能提升4. asp在iis7報(bào)錯(cuò)行號(hào)不準(zhǔn)問題的解決方法5. 告別AJAX實(shí)現(xiàn)無刷新提交表單6. 使用AJAX實(shí)現(xiàn)UTF8編碼表單提交到GBK編碼腳本無亂碼的解決方法7. msxml3.dll 錯(cuò)誤 800c0019 系統(tǒng)錯(cuò)誤:-2146697191解決方法8. CSS代碼檢查工具stylelint的使用方法詳解9. 三個(gè)不常見的 HTML5 實(shí)用新特性簡(jiǎn)介10. HTML中的XML數(shù)據(jù)島記錄編輯與添加
