疑似静的関数、MVC の単一エントリ、ファイル アップロードのセキュリティの脆弱性
PHP の関数 pseudo-static もこの方法で作成されます。
疑似静的関数に使用される関数は次のとおりです:
?
function MakeUrl($arr){ foreach($arr as $key=>$value){ $url[]=$key."_".$value; } $tmpurl=implode("_",$url); return $tmpurl.".htm"; } function ParseUrl(){ if($_SERVER['PATH_INFO']!=""){ $pathinfo=substr($_SERVER['PATH_INFO'],1); $pathinfo=str_replace(".htm","",$pathinfo); $path=explode("_",$pathinfo); $count=count($path); for($i=0;$i<$count;$i+=2){ $_GET[$path[$i]]=$path[$i+1]; } } } //使用实例,链接页面 $path="http://www.tiaotiaola.com/blog.php/"; $path.=MakeUrl(array('BlogID'=>2,'page'=>1)); 以上两行代码生成页面中的URL。 //浏览页面,调用函数ParseUrl();直接可以使用变量$_GET
?
?
もちろん、多くの MVC フレームワークはこのような機能をサポートしていますが、MVC フレームワークでは、必ずしも上記 2 つの機能を使用して実装されるわけではありません。
実際には、これは擬似静的にのみ必要なわけではありません。これもMVCに必要な機能です。これは、MVC におけるいわゆるシングル エントリもこの機能に基づいて実装されているためです。
http://www.tiaotiaola.com/s/2/3/4/5.html
実際には .htaccess または UrlRewrite によって処理されるリンクを持つ Web サイトが多数あります。処理前は次のようになります。 http://www.tiaotiaola.com/s.php/2/3/4/5.html
s.php は MVC のエントリ ファイルである必要があります。
これは、s.php/2/3/4/5.html などのファイルが PHP ファイルとして実行されることを意味します。
ファイルアップロードの脆弱性問題について。この記事が最初に公開されたとき、some.php.png は PHP として実行されると記載されていましたが、実際にはある種の設定エラーが原因でした。
some.php%3Fpng については、たとえそのようなファイルが存在しても、APACHE サーバーのセキュリティの観点から、このファイルへのアクセスは禁止されています。
もちろん、some.png.php はサーバーにアップロードできません。
しかし、アップロードが完全に安全であるという意味ではありません。アップロードされたファイル名を介した URL 埋め込み攻撃は依然として存在します。 URL 埋め込み攻撃の解決策は次のとおりです:
アップロードされたすべてのファイルの名前を変更します。つまり、元のファイル名は保存されません。保存する場合は、ファイル名から「.」やその他の不快な構文を削除する必要があります。
私たちが推奨するアプローチは、元のファイル名を保存しないことです。つまり、元のファイル名を md5 または sha でハッシュすることです。アップロード時刻を区別したい場合は、タイムスタンプを追加できます。つまり、生成されるテキストは次のとおりです。純粋な a-z0-9 ファイル名。元の拡張子を最後に追加するだけです。
別の側面: ハッカーがユーザーを制御する SHELL を攻撃できる場合、some.php.png が実行される可能性があります。この観点から見ると、重要なのはアップロード側の制御ではなく、サーバーによるリモート スクリプトの実行をどのように禁止するかというセキュリティ構成の問題です。
?
――――――――――――――――――――――――――――――――――――――――
追記: 記事の間違いを指摘してくれた 1 階の aweber に感謝します。 この記事が公開された時点では、完全にテストおよび確認されていない問題がいくつかありました。 ?
?
?
この文は間違っています。 Webサーバー(apahce、nginx)に応じて、どのようなサフィックス名が設定されたリクエストをどのようなプログラムで処理するのか。
たとえば、Apache は action コマンドを使用して
actioin application/x-httpd-php "/php/php-cgi.exe" を設定できます。このコマンドは、application/x-httpd-php メディア タイプをリクエストするときに、リクエストを行うときは、/php/php-cgi.exe を使用してリクエストを処理します
同時に、addType を使用してサフィックス名とメディア タイプ間のマッピング関係を確立できます
addType application/x -httpd-php .php このように、リクエストに .php サフィックスが付いている場合、そのリクエストは application/x-httpd-php タイプとみなされます。
必要に応じて、このように設定することもできます。これを
addType application/x-httpd-php .example に追加すると、xxx.example をリクエストすると、このファイルも PHP ファイルとして解析されます