ホームページ  >  記事  >  バックエンド開発  >  Web上の脆弱性の解説と原理分析、防止方法(ファイル名検出の脆弱性)_PHPチュートリアル

Web上の脆弱性の解説と原理分析、防止方法(ファイル名検出の脆弱性)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:02:37870ブラウズ

前回の記事: を通じて、バックエンドがサーバー変数を取得し、その多くがクライアントから渡されることはすでにわかりました。通常の get および post と変わりません。一般的な脆弱なコードを見てみましょう。
1. ファイルの種類を検出し、ユーザーが保存したファイルの名前で保存します

コードをコピーします コードは次のとおりです:

if(isset($_FILES['img' ]))
{
$file = save_file($_FILES['img']);
if($file===false) exit('保存失敗!');

echo "保存成功!",$file ;
}
function check_file( $img)
{
///ファイルを読み込みます
if($img['error']>0) return false;

$tmpfile = $img['tmp_name'];
$ filename = $img[' name'];


///ファイル拡張子を読み取ります
$len=strrpos($filename,".");
if($len===false) return false;

/ /拡張子を取得します
$ext = strto lower(substr($filename,$len+1));
if(!in_array($ext,array('jpg','jpeg','png'))) return false;
return true;
}
function save_file($img)
{
if(!check_file($img)) return false;

//フォーマット検出OK、データ移動の準備
$filename = $img['name' ];
$newfile = "upload/" .$filename;
if(!move_uploaded_file($img["tmp_name"],$newfile)) return false;

return $newfile;
}
?>

上記コード、input型に関しては私も判定して問題ないことが分かりました。しかし、問題はまさに、取得したユーザー名変数の検出に現れます。受信したユーザー名を直接取得し、ファイルとして保存します。 友人の中には、「これらのファイル名はすべて私のコンピュータに存在しており、ファイル名の形式はオペレーティング システムのファイル名定義によって制限されている」と言う人もいます。 ただし、$_FILES で取得される変数は http リクエストから直接取得されることに注意してください。他の get 変数や post 変数を取得する場合と同じです。 したがって、下心のある人がブラウザを自分でシミュレートし、特別なファイル名をサーバーに送信することがよくあります。その後、ファイルを保存するときに、通常どおり独自の形式で保存できます。

以前は、」



http://www.bkjia.com/PHPjc/327914.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/327914.html

技術記事前回の記事「Web ストレージの脆弱性、原理分析、および防止方法 (安全なファイル保存方法) についての簡単な説明」を通じて、バックエンドがサーバー変数を取得し、その多くがクライアントから渡されることがわかりました。フォローしてください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。