0

コントローラー内のモデルの作成者のアクセス ルールの最適なアプローチがわかりません。私は通常このように使用します:

public function accessRules() {
    return array(
       ...

        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions' => array('docrop', 'cropimages','upload','setting','updateprivacy','updateuser','changepassword'),
            'expression' => array($this,'isCreator'),
        ),
       ... 

    );
}

そして、そのコントローラーで、この関数を使用して正しいアクセスルールを確認しています

 public function isCreator(){
    $hasil=false;
    if(isset($_GET['id'])){
        $idUser=$_GET['id'];
        $hasil=$idUser==Yii::app()->user->id?true:false;
    }
    return $hasil;
 }

そして、URL を作成したい場合は、常にその URL で id パラメータを使用します。これは最善のアプローチですか?または、これよりも優れた代替方法はありますか?

4

1 に答える 1

0

現在のアプローチでは、ユーザーは URL の ID を変更して、すべてのアクションにアクセスできるようになります。本当にこの方法を維持したい場合は、セキュリティを強化するために、たとえば彼のIPアドレスと組み合わせて、何らかのハッシュ方法を使用してブルートフォースを少なくすることをお勧めします$hashFromUrl == md5(Yii::app()->user->id . CHttpRequest::getUserHostAddress())。それにもかかわらず、私はこのアプローチを思いとどまらせます。

メソッドが呼び出されるisCreator()ので、現在のユーザーがデータベース内の既存のモデルの作成者/作成者であるかどうかを確認したいとします。creatorIdこのモデルのフィールドを使用して、現在のユーザーの ID と比較することはできませんか? その場合、クライアント側のハックは必要ありません。

于 2013-02-10T20:52:06.297 に答える