2012-06-11 1 views
0

내 웹 사이트의 일부에 걸쳐 보안과 안정성을 증가에서 찾고 있었어요 그리고 (나는 일을해야으로) 내가 확인 봤는데 한 가지는 사용자의 모든 입력을 탈출한다. 많은 경우에 젠드 프레임 워크 : 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_Db_Table_Row setFromArray() 메소드를 사용하고 있습니다. 그러나 나는 입력이이 코드의 어느 지점에서 이스케이프되는지 알지 못합니다 (사용자의 모든 입력이 데이터베이스 근처에 있어야하기 때문에). Zend에서는 quoteInto()를 사용하지만, 외부 적으로는 mysqli_real_escape_string()을 사용한다.

위의 예제 (DB 준비)에서 사용자 입력이 이스케이프되는지 아는 사람이 있는지, 그렇지 않은 경우 setFromArray() 메소드를 계속 사용하려면 어떻게 이스케이프 처리합니까?

답변

1

setFromArray가 변수를 필터링하지 않습니다.

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

사용이 양식 규칙에 따라/유효성 검사를 필터링합니다.

다른 옵션은 filter_var 수동으로 POST 또는 Zend_Filter 있습니다. 그것은 업데이트를 수행() 유효성 검사를 수행하지 않는

setFromArray()는 단지 값으로 행 개체를 채 웁니다하고 저장. 그래서 당신은 그 전에 이스케이프/검증을해야하며 자동이 아닙니다. 폼 자체에 필터를 추가 한 다음 getFiltredValues ​​/ getUnfilteredValues를 사용할 수 있습니다. Zend_Select를 사용하고 매개 변수를 바인딩 할 때 유일한 자동 이스케이프가 발생한다고 생각하십니까?

+0

감사 Elzo은, 난 그냥 빨리 함께 그 예를 넣어하지만, 모든 경우에()에 getValues를 사용하는 메모를 만들 것입니다. 그러나 질문은 여전히 ​​남아 있습니다 : 사용자 입력이 자동으로 이스케이프됩니다 (유효성 검사와 다름). 필자는 필터가이 중 일부를 수행 할 수 있다고 생각하지만 이는 주입 공격을 차단하기 위해 모든 입력에 필터를 추가해야한다는 것을 의미합니까? – dKen

+0

setFromArray()는 행 객체를 값으로 채우고 save()가 유효성 검사를 수행하지 않고 업데이트를 수행합니다. 그래서 당신은 그 전에 이스케이프/검증을해야하며 자동이 아닙니다. 폼 자체에 필터를 추가 한 다음 getFiltredValues ​​/ getUnfilteredValues를 사용할 수 있습니다. Zend_Select를 사용하고 매개 변수를 바인딩 할 때 유일한 자동 이스케이프가 발생한다고 생각하십니까? –

+0

와우, 감사합니다. 저에게 맞는 대답으로 표시해주십시오. 저는 데이터베이스를 통해 양식을 저장하기 위해 온라인에서 본 예제 중 어느 것도 놀랍지 않습니다. setFromArray()는 이스케이프하는 모든 데이터를 표시합니다. – dKen