どのようにハッシュ要素は、Zendのフレームワーク上のセキュアログインをするのでしょうか?
-
20-09-2019 - |
質問
私は
ログインフォームと同じブローコードの例を見てclass Form_Login extends Zend_Form {
//put your code here
public function init($timeout=360){
$this->addElement('hash', 'token', array(
'timeout' => $timeout
));
$this->setName('Login');
$username = $this->createElement ( 'text', 'username' );
$username->setLabel('user name:')
->setRequired();
$this->addElement($username);
$password=$this->createElement('password','password');
$password->setLabel('password:');
$password->setRequired();
$this->addElement($password);
$login=$this->createElement('submit','login');
$login->setLabel('Login');
$this->addElement($login);
$this->setMethod('post');
$this->setAction(Zend_Controller_Front::getInstance()->getBaseUrl().'/authentication/login');
}
}
とsubmitActionで
同じ以下部品コード
if (!$form->isValid($request->getPost())) {
if (count($form->getErrors('token')) > 0) {
return $this->_forward('csrf-forbidden', 'error');
}
$this->view->form = $form;
return $this->render('login');
}
今、私の質問、ハッシュ要素の使用のためにいただきました理由は? どのようにこのハッシュ要素セキュアログインをする?
誰もがこれらを説明できますか?
感謝
解決
ウィキペディアは(クロスサイトリクエストフォージェリ)のページを持っています。ただ、質問のあなたの言葉遣いにピックアップします。 のそれはそれはの確保がありません、それだけで攻撃の種類から保護します。
要するに、誰かがユーザーの知識がなくて(隠しフレームまたは画像タグのいずれか)のURLをロードするようにブラウザを取得することにより、ページを訪問することなしに、ユーザーのサーバー上の状態を変更することができます。
この場合には、ログインCSRFから保護されています。例では、カスタムGoogleアカウントに被害者を記録できることになります。彼らはこのアカウントを使用して検索するとき、あなたは自分の検索履歴へのアクセスを持つことになります。
これらのメソッドの両方の欠陥は、彼らが実際のフォームがオンになっているページにアクセスする方法がありませんです。保護は、そのため彼らは、ログインページにアクセスし、他の値と一緒に正しいハッシュを提出確保するために、ユーザーにハッシュを割り当てることです。
ログインCSRF防御するアンおそらくより良い方法はReferer
ヘッダーをチェックし、それが正しくないか、存在しない場合、それを拒否することである。
他のヒント
Zend_Form_Element_Hash のZend Frameworkのマニュアルます:
この要素は、データがフォームを生成し、ユーザー・セッションではなく、不正なスクリプトによって提出されることを保証、フォーム上のCSRF攻撃からの保護を提供します。保護は、フォームにハッシュ要素を追加し、フォームが送信されたときに、それを検証することにより達成されます。
ブルートフォーススクリプトは、単に資格情報のランダムな組み合わせを掲載することにより、トークンがなかった場合は、サイト上のパスワードを推測しようとすることができます。ハッシュがセッションに保存されているので、しかし、偽装された要求は、このようにサイトを攻撃するために難易度を上げ、同様にセッションCookieが含まれていなければならないでしょう。
ですから、ログインページには、それが呼び出されたハッシュ/トークンが含まれています。このトークンは、特定の寿命のためのセッションに保存されています。ユーザーがログインすると、トークンがログイン資格情報の一部でない場合、要求は別のサーバーから来るものと仮定して拒否されます。
も参照してくださいウィキペディアCSRF での