2017-05-17 4 views
1

ORMが何らかの衛生技術を使用しているような印象ですが、わかりません。私はhttp://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.htmlを見て、問題についてはっきりしていなかった。セッターメソッドを使用してDoctrine Entityにデータを入力するときに、自分の入力を消毒する必要がありますか?

質問 POSTは、以前にサニタイズされていない

$product = new Product(); 
$product->setModel($_POST['model']); 

を使用する

は、それが安全だろうか、私はいつも教義に送信する前に、最初に私の値を検証/サニタイズしなければなりませんか?参照

/** 
* @Entity 
*/ 
class Product 
{ 

    /** 
    * @var integer @Column(name="id", type="integer", nullable=false) 
    *  @Id @GeneratedValue 
    */ 
    private $id; 


    /** 
    * @var string @Column(type="string") 
    */ 
    private $model; 
} 
+0

Doctrineはプリペアドステートメントを使用していますので、SQLインジェクション保護されます。あなたのデータを検証するのはあなた次第です。ありがとう。 – Cerad

答えて

1

については

あなたは常に/サニタイズのユーザー入力を検証する必要があります。 Doctrineは準備されたクエリ(SQLインジェクションを防止する)を使用していますが、他の攻撃に対して安全ではありません。

は教義での入力に対処する方法を確認するために、このページをチェックしてください:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.html#user-input-and-doctrine-orm

0

をあなたが正しい、ドクトリンORMは自動的にすべての消毒を行っています。したがって、ORMを使用している限り、は完全に安全ですです。

あなたの例では、追加の墨塗りは必要ありません。

私は唯一の代わりに生の$ _POST配列を使用しての作業が自動的にコントローラに注入されたリクエスト・オブジェクトを使用することになっていると言うでしょう:

$product = new Product(); 
$product->setModel($request->get('model')); 
+0

ありがとうございます。私の場合は、完全なフレームワークのサポートが設定されていないので、私は$ _POSTを使用しています。 Doctrine +ライブラリAPIを選択するだけです。あなたの答えはまだ立っていますが、フレームワークによって異なります。 – Dennis

+1

私はあなたが「完全に安全」だとは思わない。 SQLインジェクション攻撃に対してのみ安全です。 DQLの使用を開始すると安全ではありません。特定のデータ型(番号)を期待して、ユーザーが何か別のものを送るときは安全ではありません。例外が発生します。ベストプラクティスでは、「決してユーザーを信用しない」と言い、ユーザーの入力を常に検証し、サニタイズします。 – kormik

関連する問題