CakePHP에 데이터를 저장하면서 mysql_real_escape_string 및 htmlspecialchars를 사용하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/956761

문제

CakePHP와 함께 fckeditor를 사용하고 있으며 편집기에서 보낸 데이터를 저장하면 데이터베이스에 저장하기 전에 데이터에서 HTMLSpecialchars () 및 MySQL_REAL_ESCAPE_STRING () 함수를 실행하고 싶습니다. 문제는 CakePHP 프레임 워크 내 에서이 작업을 수행해야 할 곳을 확신하지 못한다는 것입니다. 나는 다음과 같이 컨트롤러에서 시도했습니다.

function add() 
{
   if (!empty($this->data)) 
   {
      if ($this->Article->save(mysql_real_escape_string(htmlspecialchars($this->data)))) 
      {
         $this->Session->setFlash('Your article has been saved.');
     $this->redirect(array('action' => 'index'));
      }

   }
}

그러나 $ this-> 데이터는 배열이며 해당 함수는 문자열을 기대하므로 작동하지 않습니다. 모델의 검증 배열에서 수행합니까? 나는 모른다. 또한 mysql_real_escape_string () 내에서 htmlspecialchars ()를 실행하는 것이 좋은 관행이 아닌지 알려주십시오.

도움이 되었습니까?

해결책

사용하지 마십시오 htmlspecialchars() 때를 저장 데이터, 당신이 할 때 사용하십시오 산출 HTML에 대한 데이터. HTML 이외의 일부 컨텍스트에서 데이터를 살펴 봐야한다면 어떻게해야합니까?

또한 나는 케이크 사용자는 아니지만 신청해야한다면 놀랄 것입니다. mysql_real_escape_string() 데이터를 저장할 때. 데이터베이스 액세스 계층은 SQL 주입로부터 보호해야하며 수동으로 수행하면 이중으로 이루어진 문자열을 저장하게됩니다.

다른 팁

짧고 간단한 대답은 - 데이터베이스 액세스가 추상화되면 이러한 기능을 전혀 호출 할 필요가 없습니다.

필요한 곳은 현악기에서 실제 SQL을 만들 때입니다. 어쨌든하지 말아야 할 것은 아니지만 또 다른 이야기입니다.

결론은 - 프레임 워크가 올바른 일을하고 방해하지 않을 것입니다.

편집 : Bill Karwin이 지적한대로 - htmlspecialchars() 여기 완전히 잘못된 부서 출신입니다.

CakePHP로 자신의 SQL 문자열을 구축하는 경우 CakePHP는 탈출 기능을 제공합니다.

escape(string $string, string $connection)

http://book.cakephp.org/view/1186/escape

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top