1

特定の要素への処理を指定するために、URL でいくつかのエンティティの ID を使用しています。ルーティング ファイルは次のようになります。

UpdateUser:
    pattern:  /UpdateUser/{id}
    defaults: { _controller: AfricaClientBundle:Secteur:UpdateUser } 

URLでは、次のようなものを取得します。

http://127.0.0.1/Symfony/web/app_dev.php/UpdateUser/215

これはまったく安全ではないようです。それを隠す方法や何をすべきかについてのヒント。

4

3 に答える 3

0

@ihsan が以前に回答したように、URL で ID を使用すること自体はセキュリティの問題ではありません。ID の代わりにDoctrine Sluggable Extensionを使用できます。1 つのオブジェクトのみを参照している場合でも、パラメータは一意である必要があることに注意してください。Sluggable には SEO の利点もあります。

于 2013-03-12T12:35:00.027 に答える
0

この場合、特に、ユーザーが自分自身を更新できるようにしたい場合は$id、URL の を省略して、コントローラーで security.context から読み取る必要があります。

$user = $this->get('security.context')->getToken()->getUser();

Userこれにより、現在ログインしているユーザーからエンティティが読み込まれます。[...]->getUser()->getId()を取得する必要があります$id

これを UpdateUsuarioAction でのみ機能させたくない場合、より一般的なものが必要な場合は、POST代わりに使用するGETか、変数を完全に省略してセッションに保存する必要があります。POSTユーザーがデータを変更できるため、使用はそれほど安全ではないことに注意してくださいPOST。もう少し作業が必要です。

一般に、ID を渡すことは安全ではなく、ソフトウェアのルールによって異なります。

于 2013-03-12T12:49:21.037 に答える
0

ページまたは URL のいずれかでエンティティ ID をユーザーに表示したくない場合は、エンティティごとに一意のプロパティを定義する必要があります。これは「パブリック」にすることができます。

User場合によっては、通常、 または プロパティを設定しemailusernameURLUniqueでのみ指定できます。そうすれば、URL の ID をインクリメントしてユーザー データベースを「ファーム」することはできません。

この動作は、URL にあいまいな番号を使用するよりも安全であるだけでなく、よりきれいで親しみやすいものです。

一番

于 2013-03-12T08:34:30.330 に答える