2

URLでのクラス名やパラメータの使用に関するセキュリティ上の問題はありますか?

パスをルーティングする単純なPHPページルーターを作成しました。次に例を示します。

www.mysite.com/classname/methodname/param1/param2/etc/etc

クラスとメソッドの名前を明らかにすることに危険はありますか?または、クラスメソッドに十分なフィルタリングを設定して、問題にならないようにする必要がありますか?

また、私のAJAX呼び出しも同じようにルーティングされます。正当なAJAX呼び出しを保証するために、呼び出しが行われるたびに変更されるセッショントークンを何らかの方法で生成できますか?たとえば、AJAXによってアクセスされているPHPスクリプトで乱数が生成され、これも呼び出しによって送信されます。それらが一致する場合は、許可された要求です。唯一の問題は、どのようにそれらを一致させるかです。

4

1 に答える 1

2

セキュリティ上の最大の懸念は、次のようなクラス名を盲目的に含めていないことです。

require_once('classes/' . $_GET['class'] . '.php');

上記は脆弱な例であるため、ローカルファイルインクルードの脆弱性を回避するために、クラス名または含めるファイルを必ず検証してください。

class_exists()十分ではありません。最初に検証して、が含まれるようにしますa-z。次に、file_exists、class_existsなどを使用します。

すべてのクラスとメソッドがルーティングを介して一般に使用されるわけではないので、ルーターが指定されたクラスとメソッドにアクセスできるかどうかを確認するシステムを用意してください。これは、さまざまな方法で実行できます。たとえば、公開されているクラスを基本クラスからBaseController派生させて、含まれているクラスがそれから派生しているかどうかを確認したり、コントローラーを内部クラスとは別のディレクトリに保持して、クラス内のアクセスを制御したりできます。必要に応じて。

クラスとメソッドを明らかにすることに関しては、これは実際には問題ではありません。実際、ほとんどのMVCフレームワークがどのように機能するかです。ユーザー入力として入力されるすべてのものを検証するようにしてください。

AJAXの提案については、そうです。トークンをセッションに保存することで実行できます。これにより、呼び出しが行われたときにトークンが一致するかどうかを確認できます。ただし、これによってセキュリティが大幅に向上するとは思いません。通常、AJAXサービスは、とにかくページで利用できるのと同じデータを提供します。

于 2012-11-26T07:24:49.167 に答える