2017-01-16 11 views
-1

こんにちは私のPHPプロジェクトでは、ユーザーはフォームの入力を介してテーマの名前(電卓デスクトップテーマメーカー)を送信します。 (プロジェクトはgithubでホストされています) 問題は次のとおりです。 テーマ名にこれを使用して、ユーザーはサービス上の任意のフォルダにアクセスする可能性があります。 私はこのコミットでそれを修正しようとした:Github commitユーザー入力のパスインジェクション

$theme_name = str_replace("/", "_badyou_", $_GET["name"]); //contains the good themename 

私は名前だけを必要とするので、私は排除は、「/」は十分であると考えました。 しかし私は実際に私よりもPHPをよく知っている人の意見が必要です。

P.S私の悪い英語のために申し訳ありません。 ありがとうございます。

+1

コードには、エラーをユーザーに通知するメカニズムがありますか?ランダムにユーザー入力を変更するのではなく、適切なエラーメッセージで悪い入力を拒否する方が簡単だと思います。ブラックリストアプローチが失敗する運命にあることは言うまでもありません。 –

答えて

0

。関数が変化しているので/dir_to_folder/$theme_name/$theme_name.tdesktop-theme

誰かがすでに私のファイルシステムを攻撃しようとしましたが、彼らは失敗したよう

$theme_name = str_replace("/", "_badyou_", $_GET["name"]); //contains the good themename 

$ THEME_NAMEは、ファイルの作成に使用されます"/"の文字が "badyou"となっています。私はデータベースを使用していないため、これも可能です。 これが誰かを助けることを願っています。

0

コードインジェクション攻撃からコードを保護しようとしているようです。コードの挿入により、攻撃者は悪質なコードの実行を強制することができます。これは、URLに悪質なコードを渡すことによって行うことができます。詳細については、このリンクを参照してください:https://www.owasp.org/index.php/Code_Injection。このリンクも参照してください:http://www.derby-web-design-agency.co.uk/blog-post/what-is-and-how-to-prevent-url-injections-in-php/11/

開発者は、アプリケーションに送信されたすべての入力を検証する必要があります。 Phpは、データの検証とサニタイズのためのいくつかの関数を提供します。例えば:私は、次のコードを使用することは十分にあることを見た過去日でtrim()strip_tags()htmlentities()mysqli_real_escape_string()

+1

「サニタイズ」という言葉が含まれていると私が今までに見つけた注射のほとんどのソリューションは間違っていました。示唆されている関数はユースケースを持つかもしれませんが、それらをランダムに適用すると(通常はそれらのうちのいくつかは同時に)、通常はデータが壊れてしまい、最終的にファイルシステムのパス注入を助けることができません。 –

+0

filter_input関数を試すことができます。必要に応じて、特定のフィルタを使用して$ _GET配列変数をフィルタリングします。参照:http://php.net/manual/en/function.filter-input.php –