2016-11-20 7 views
2

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つのものです。

私は他の攻撃方法について何かを見つけることができませんでした。

私は何かが欠けてる場合は私に知らせてください!私はちょうど「あなたはこれをしてはいけない」と言ったいくつかのコメントを読んだので、私は何かを誤解しているという緊張している。

+0

あなたの拠点がカバーされているようです。 –

答えて

0

シナリオの後半でunserialize()コールを悪用するために何かをPOST変数として送信することは、それ以上の攻撃なしには不可能だと思いますが、他にも考えがあるかもしれません。 $ _POSTに直列化できないものがあったら問題になるかもしれませんが、それは起こらないかもしれません。 $ _POSTにあったものは何でも、それは一旦メモリにすでにあったので、正しくserialize()unserialize()作業を想定し、しかし、あなたはその間のディスクにこのデータを保存している

$serialized = serialize($userinput); 
unserialize($serialized); 

ような何かを行うことが安全である必要があります。 (ITのオペレーションスタッフのように、あるいは「デザインによる」アクセスを有する)が異なる欠陥を悪用して、ファイルへのアクセスを持った後、攻撃者は、保存されたシリアル化されたデータを変更することができるかもしれ、そしてそこに彼の攻撃を注入することができます。そうすれば明らかに脆弱になるでしょう。

本当にリスクは高いですが、非常に高いものではないかもしれません。このソリューションのセキュリティは、保存されたシリアライズされたコンテンツのセキュリティに大きく依存することに注意してください。

+0

誰かがdownvoteを親切に説明できますか?私はあなたが私になぜそれが間違っているか教えてくれれば、私の答えを修正したり削除したりしてうれしいです。 –

関連する問題