0

문자열을 이스케이프 처리하고 항목을 다시 저장하면 반복적으로 이스케이프 처리되는 문제가 디버깅하려고합니다 (자체 코드 아님).Typo3 v4.5.30 자동 이스케이프 문자열을 사용합니까?

코드는 mysql_real_escape_string을 사용합니다. 그러나 마술 따옴표가 꺼져 있어도 내 액션이 호출 될 때 이후 변수가 이미 인용되어 있으므로 mysql_real_escape_string을 호출하면 따옴표가 두 배가됩니다. 항목이 다시 저장 될 때마다 점점 더 많은 조각이 쌓입니다.

그래서 데이터베이스에 가기 전에 항목을 이스케이프 처리 (한 번) 한 다음 페이지에 표시 할 때 이스케이프 처리하지 않도록해야합니다.

내 행동은과 같이 시작 :

public function adminAction() { 
    $prizes = $_POST['tx_xxx_bingofrontend']['prize']; 
    //at this point my prize[] elements are already quoted, why? 
    foreach ($prizes as $key => $prize) { 
     foreach ($prize as $field => $value) { 
      // echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF"); 
      // echo strip_tags($value) ;die; 
      // OFF gets printed 
      $cleanedValues[$field] = mysql_real_escape_string(strip_tags($value)); 
     } 
.... more code 
내가 TYPO3의 v4.5.30을 사용하고

, 내 액션 코드 화재 전에 탈출하지 호출 어딘가에 만든 TYPO3 설정 또는 가능하게 확장 API 호출이?

문자열이 제대로 표시되고 제대로 다시 저장되는지 어떻게 확인할 수 있습니까?

감사합니다.

업데이트 : 지금이 코드를 가지고 :

public function adminAction() { 
     $postsvars = t3lib_div::_POST(); 
     $prizes = $postsvars['tx_xxx_xxfrontend']['prize']; 


     foreach ($prizes as $key => $prize) { 
      foreach ($prize as $field => $value) { 
       //echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF"); 
       // echo strip_tags($value) ;die; 
       $cleanedValues[$field] = $GLOBALS['TYPO3_DB']->quoteStr(strip_tags($value),'tx_xxx_domain_model_prize'); 
갱신하기 전에 각 전에 실행

작성하고 제대로 잘 모르겠어요 (슬래시를 추가하는 방법은 호출에 내 TABLENAME을 사용하지만, 너무 좋아 보인다) 보인다. 내가 물건을 위로 읽고 제거 할 때 슬래시는 나의 모델처럼 표시 : 슬래시의 제거 내가 원하는 것이 아니다 데이터베이스에 저장됩니다

public function UnEscapePrize(){ 
       $this->setTitle(stripslashes($this->getTitle())); 
       ..... other vars get un-escaped 
    } 

. 나는보기를 위해 그들을 제거하고 싶다. 그렇게하려면 어떻게해야합니까?

업데이트 2 : 아니면 아무것도 걱정하지 않습니까? 는 typo3입니다. 4.5.3/extbase 1.3은 기본 업데이트를 사용하고 메소드를 추가 할 때 SQL 삽입 공격에 취약합니다. 그것은 문자열 concat를 사용하여 SQL 조각을 누른 다음 그것은 있지만 준비된 진술을 사용하는 경우 수 있습니다. 나는 아직도 문자열 concat SQL을 많이 사용하는 곳에서 왔습니다. 그래서이 걱정은 저에게 두 번째 자연입니다.

+0

정말 extbase 기반 확장입니까? Extensions는 extbase, pi_base 또는 pur PHP 코드를 기반으로 할 수 있습니다. 확장이 pi_base를 확장 할 것으로 기대합니다. f.e.를 사용하는 경우. exec_INSERTquery mysql_real_escape_string이 자동으로 처리됩니다. – maholtz

답변

1

TYPO3가 자동으로 POST 변수를 이스케이프 처리합니다.

typo3에서 액세스하는 올바른 방법은 t3lib_div::_POST($name)이며 이스케이프 처리되지 않습니다.

the documentation을 참조하십시오.

+0

좋아요, 그래서 만약 내가 그들을 _Post에서 곧장 탈출하면 이스케이프 될 것입니다, 그리고 DB에 스틱을 올려 놓습니다. 그리고 나서 그들이 읽힐 때 나는 어떻게 이스케이프를해서 이스케이프해야합니까? 다시 표시 될 때 슬래시가 없습니다. 이제는 항목이 웹 페이지에서 다시 저장 될 때 슬래시가 쌓입니다. –

+0

$ _POST를 사용하지 마십시오. 그것만큼이나 간단합니다. – cweiske

+0

내 업데이트를 참조하십시오. 시도했지만 작동하지 않았습니다. –