CakePHP에 데이터를 저장하면서 mysql_real_escape_string 및 htmlspecialchars를 사용하는 가장 좋은 방법은 무엇입니까?
-
12-09-2019 - |
문제
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)