我正在做一個簡單的事情在PHP中,我不知道如何我可以測試,如果變量$路徑包含以下結構../PHP:防止文件夾黑客入侵 - 如果路徑有../在裏面?
所以我只是有一個?path = somepath結構在我的網址,如果有人會進入../它允許他去一個目錄。我當然知道這不是最好的解決方案,但是對於我的小東西來說,如果我只是在$ path變量中測試一個「../」字符串就足夠了。如果這樣死();
我不確定最佳的測試方法是什麼!
問候亞光
我正在做一個簡單的事情在PHP中,我不知道如何我可以測試,如果變量$路徑包含以下結構../PHP:防止文件夾黑客入侵 - 如果路徑有../在裏面?
所以我只是有一個?path = somepath結構在我的網址,如果有人會進入../它允許他去一個目錄。我當然知道這不是最好的解決方案,但是對於我的小東西來說,如果我只是在$ path變量中測試一個「../」字符串就足夠了。如果這樣死();
我不確定最佳的測試方法是什麼!
問候亞光
回答你的問題:
if(strpos($path,'../') !== false){
// looks like someone 's trying to hack here - simply
// do nothing (or send an email-notification to yourself
// to be informed and see how often this happens)
}else{
// here comes the magic
}
但是:你真的不應該這樣做。如果您想要一個簡單的解決方案,請爲每個可能的$路徑使用switch-statement幷包含相關文件(或任何您必須執行的操作)。
語言的任何原因? – RobertPitt 2010-07-27 09:45:56
@RobertPitt:我不想得罪別人 - 我希望現在好一點;) – oezi 2010-07-27 09:50:31
用+替換投票,它不會對自己感冒,但其他人會發現它不需要那個帖子:),快樂的日子 – RobertPitt 2010-07-27 09:52:06
而是這樣做的,你可以只調用它的realpath()
並檢查它是否應該是在路徑就是一個前綴。
更好的是,爲什麼不保留白名單並拒絕其中的任何內容?
我是一個替代的解決方案,允許您自定義的URL ....
<?php
$arr= array(
"register" => "register.php",
"login" => "userlogin.php",
"admin" => "adminlogin.php",
"etc" => "otherpage.php",
);
if (isset ($_GET['path'])
if (array_key_exists($_GET['path'] , $arr)){
//do some stuff...
include($arr[$_GET['path']]);
}
else
echo 'Page Not Found!';
else
echo 'Required Field Empty!';
?>
所以調用index.php?path=admin
adminlogin.php
網頁將被列入....
也確保你有,如果你的期運用
不是真的..因爲(如果PHP配置精細)'的index.php?ARR [ihack] = ....'可能是隻從'$ PHP訪問_GET [ '常用3']'...在PHP腳本'$ arr'不會被替換.... – Marcx 2010-07-27 10:02:31
而且更糟糕的是SQL注入攻擊'的index.php?ARR =?> DROP TABLE「'! – 2010-07-27 10:45:01
容易的方法之一是硬化您的php.ini
配置,特別是open_basedir directive。請記住,一些CMS系統在代碼中確實使用了..\
,並且在根文件夾外部包含這些內容時可能會產生問題。 (即梨模塊)
另一種方法是使用mod_rewrite。
除非您使用包含文件檢查來自$_GET
和$_SERVER['request_uri']
變量的每個注入URL,否則您將爲此類攻擊打開大門。例如,您可能會保護index.php
而不是submit.php
。這就是爲什麼強化php.ini
和.htaccess
是首選的方法。
mod_rewrite沒有任何幫助 – 2010-07-27 11:03:25
@col你不能認真.. – 2010-07-27 12:38:48
'index.php?arr =?> DROP TABLE'和/ item/DROP TABLE /'沒有區別。去搞清楚 – 2010-07-27 16:38:42
爲什麼你使用這樣一條路徑? – 2010-07-27 11:02:51
@mathi我很困惑你爲什麼要發送'?path = url'而不是鏈接中的實際URL。我告訴你,它的安全蠕蟲開放的可能性。 – 2010-07-27 12:45:10
因爲我正在建立一種在我的服務器上讀取我的文件的filbrowser。一個文件包含整個用戶界面。 $ path設置文件夾路徑當前在我的文件瀏覽器中查看的文件夾。我不能只設置實際的網址,對我的項目沒有意義。 – matt 2010-07-27 23:04:35