TLDR:それはファイルへの$ _POST配列をシリアル化し、別の要求または異なるスクリプトに戻って$ _POST変数にそれを読むことは安全ですか?
私は、これは珍しいです実現しています。そこに理由があり、それは私が特殊な場合にはそれをやって検討していますなぜ、少なくともその間に、説明するテキストのダースのページを取るだろう。
煮詰めプロセスは:
file_put_contents('sample.post', serialize($_POST));
$_POST = unserialize(file_get_contents('sample.post'));
私はすでにポスト変数の実際の内容のための場所で豊富なフィルタリングを持っています。私の質問は全体の$ _POST配列をシリアライズし、unserializingのプロセスは、悪意のあるユーザーが、攻撃の方法を与えているかどうかではありません。
PHPのドキュメントでは、「信頼できないユーザー入力をunserialize()に渡さないでください。オブジェクトのインスタンス化と自動ロードによってコードのロードと実行が発生し、悪意のあるユーザーがこれを利用する可能性があります。
私はこの攻撃方法を説明するこれらの記事を見つけました。しかし、彼らは($ _ POST [「値」])IEアンシリアライズ、直接アンシリアライズする文字列を指定することができるという、ユーザーに依存するように見えます。
https://www.notsosecure.com/remote-code-execution-via-php-unserialize/ https://heine.familiedeelstra.com/security/unserialize
私がいる限り、私はシリアライズとunserializingていますように、オブジェクトは右、unserializingプロセスで作成することができないことを修正するのですか?
は、私は(私は明示的にPHPのドキュメントに記載された見つけることができませんでしたが)$ _POST配列がしかの文字列が含まれているという印象の下にいます。
私はそれを理解するように、誰かがシリアル化されたオブジェクトのフォーマットに一致する文字列を供給する場合であっても、それが明示的な長さ(バイト長)と、シリアル化中に文字列として「保存された」ことになります。したがって、シリアル化を解除するときには文字列として割り当てられます。文字列の長さは、直列化の際に彼らと一緒に保存されているので、あなたはSQLインジェクションとテースト入力からシリアライズされた文字列の構造を壊すことができないように思えます。無効なマルチバイト文字でトリックしようとしましたが、運がありません。しかし、私はそれを行うことができないし、ハッカーがそれを行うことができる経験豊かな2つのものです。
私は他の攻撃方法について何かを見つけることができませんでした。
私は何かが欠けてる場合は私に知らせてください!私はちょうど「あなたはこれをしてはいけない」と言ったいくつかのコメントを読んだので、私は何かを誤解しているという緊張している。
あなたの拠点がカバーされているようです。 –