1

最近、CakePHP を使用した簡単なブログの作成に関するチュートリアルを終了しました。リンクは次のとおりです: http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html 検証フォームの作成は非常に簡単で高速です、しかし、1つの問題に気付きました。

post.ctp という名前のファイルには次が含まれます。

  echo $this->Form->create('Post');
  echo $this->Form->input('title');

そして、次の入力でエンド ユーザーにフォームを生成します。

<input id="PostTitle" type="text" required="required" maxlength="50" name="data[Post][title]">

Firefox Firebug を使用している人は、フォームを送信する前に html コードを from: から: に変更できname="data[Post][title]"ますname="data[Post][author]"。この結果、「タイトル」ではなく「著者」という名前の列が更新され、「タイトル」の空のデータでデータベースを更新することもできます。

Post.php の「モデル」という名前のフォルダーでは、検証ルールはそれを妨げません。

class Post extends AppModel {

public $validate = array(
    'title' => array(
        'rule' => 'notEmpty'
    ),
    'body' => array(
        'rule' => 'notEmpty'
    )
);

}

アプリケーションを保護し、誰かがデータベース内の他の列を更新できないようにする方法は?

4

2 に答える 2

3

Cake のセキュリティ コンポーネントには、フォームの改ざん防止機能が含まれています。コントローラにセキュリティ コンポーネントを追加する必要があります。

public $components = array('Security');
于 2013-02-09T20:41:41.607 に答える
2

モデルのドキュメントをご覧ください。これを処理するには、少なくとも2つの方法があります。

  1. fieldlistを呼び出すときに、3番目のパラメーターとして渡すことができますsave()
  2. whitelistを呼び出す前に、モデルのプロパティを設定できますsave()

私はまだこれを使用していませんが、セキュリティコンポーネントは別のオプションです。

于 2013-02-09T19:22:31.447 に答える