2017-05-17 16 views
1

나는 ORM이 일종의 위생 기술을 사용하고 있다는 인상을 받았지만 잘 모르겠습니다. 나는 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/security.html을보고이 문제에 대해 명확하지 않았습니다.나는 setter 메소드를 사용하여 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

교리가 준비된 문을 사용을 따라서는 SQL 주입에 대해 사용자를 보호합니다. 데이터의 유효성을 검사하는 것은 귀하에게 달려 있습니다. – Cerad

답변

1

를 들어

당신은 항상/살균 사용자 입력의 유효성을 검사해야한다. Doctrine은 준비된 쿼리 (SQL 주입을 방지 함)를 사용하지만 다른 공격으로부터 안전하지는 않습니다.

확인이 페이지 교리 입력을 처리하는 방법을 볼 수 있습니다 : 교리 ORM 자동으로 모든 위생을하고

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

0

당신 말이 맞아. 그러므로 ORM을 사용하는 한 은 완벽하게 안전합니다입니다.

따라서 예제에서는 추가 위생 처리가 필요하지 않습니다.

난 단지 대신 원시 $의 _POST 배열을 사용하는 자동 컨트롤러에 주입 요청 객체 사용하기로되어 있는지 말할 것

:

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

감사합니다. 제 경우에는 전체 프레임 워크 지원을 설정하지 않았으므로 원시 $ _POST를 사용하고 있습니다. 그냥 Doctrine + 라이브러리 API를 선택하십시오. 귀하의 대답은 여전히 ​​있지만 프레임 워크에 따라 다릅니다. – Dennis

+1

나는 당신이 "완벽하게 안전하다"고 생각하지 않는다. SQL 인젝션 공격에 대해서만 안전합니다. DQL을 사용할 때 안전하지 않습니다. 특정 데이터 유형 (숫자)을 기대하고 사용자가 다른 것을 보내면 안전하지 않습니다. - 예외가 발생할 것입니다. 가장 좋은 방법은 "결코 사용자를 신뢰하지 말고"사용자 입력을 항상 유효성을 검사하고 위생적으로 말합니다. – kormik