0

私はいくつかの Web サイトでセキュリティと安定性を向上させることを検討しており、チェックしていることの 1 つは、ユーザーからのすべての入力をエスケープすることです (そうする必要があります)。

多くの場合、標準の Zend_Db_Table_Row setFromArray() メソッドを使用しています。

$myForm = new Form_MyForm();
$myTable = new Model_DbTable_MyTable();

if ($this->getRequest()->isPost()) 
{
    if ($myForm->isValid($_POST))
    {
        $myRow = $myTable->createRow();
        $myRow->setFromArray($_POST);
        $myRow->save();
    }
}  

期待どおり、これはうまく機能します。ただし、このコードの任意の時点で入力がエスケープされているかどうかはわかりません (ユーザーからのすべての入力は、データベースの近くに配置される前にエスケープする必要があります)。私は Zend で quoteInto() を使用していますが、外部でも mysqli_real_escape_string() を使用しています。

上記の例でユーザー入力がエスケープされているかどうか (DB の準備ができているかどうか) を知っている人はいますか?

4

1 に答える 1

1

setFromArray は変数をフィルタリングしていません。使用する

$form->getValues() ; // not directly the $_POST

これにより、フォームのルールに従ってフィルタリング/検証が行われます。

他のオプションは filter_var 手動で POST または Zend_Filter です。

setFromArray() は行オブジェクトに値を入力するだけで、save() は検証チェックを行わず、更新を行います。したがって、その前にエスケープ/検証を行う必要があり、自動ではありません。フォーム自体にフィルターを追加してから、getFiltredValues/getUnfilteredValues を使用できます。Zend_Select を使用し、パラメーターを ?

于 2012-06-11T09:36:03.553 に答える