2010-12-05 7 views
0

나는 주석 달기 시스템을 만드는 중입니다. 나는 php-OEmbed 클래스와 HTML Purifier 클래스를 사용하고 있습니다. 주석은 내 데이터베이스에 안전하게 삽입 할 수 있도록 어떤 필터를 사용할 수 있습니까? 나는 당신이 FILTER_SANITIZE_STRING과 같은 PHP 필터를 사용할 수 있다는 것을 알고 있지만 이것들은 엔티티로 HTML을 바꾸지 않을 것입니까?코멘트 안전 보장

또한 WMD editor과 같은 것을 사용하는 경우 클라이언트 측에서 무언가를 사용해야합니까 (예 : PHP Markdown) 안전한 지 확인하십시오.

답변

2

기본적으로 사용자 입력을 보낼 때마다 사용자 입력을 위생해야합니다.

데이터베이스에 넣을 때 SQL 특수 문자를 인용하여 SQL 주입을 방지해야합니다 (준비된 명령문이이를 대신합니다). 브라우저로 보내면 스크립트 삽입을 방지하기 위해 HTML 특수 문자를 이스케이프해야합니다 (PHP는이 기능을 수행합니다).

특수 문자를 이스케이프해야하는 다른 장소가있을 수도 있습니다. 예를 들어, 서버의 Bash 스크립트에 설명을 보내 어떤 종류의 처리를 수행 할 경우. 이 경우 Bash 특정 특수 문자를 인용하거나 이스케이프해야합니다.

잘못된 단계에서 인용/이스케이프 처리를하지 않는 것이 중요합니다. 예를 들어 자신이하는 일을 절대 확신하지 않는 한 HTML 엔터티를 데이터베이스에 넣을 때 이스케이프 처리하지 마십시오. 데이터베이스 연결이 실패 할 경우 오류 메시지를 보내는 경우 실수로 데이터베이스에서 데이터베이스를 꺼내 브라우저로 보내거나 데이터베이스에서 오류를 보내지 않을 때 실수로 다시 이스케이프하는 것이 매우 쉽습니다 (XSS 취약점이 발생할 수 있음).). 마지막 순간에 탈출하고이 함정을 피할 가능성이 높습니다.

1

SQL 삽입에 필터를 사용할 필요가 없습니다. 바람직한 해결책은 prepared statements을 사용하는 것입니다. 예를 들어, PDO는 PDOStatement을 제공합니다.

+0

추가하는 것을 잊어 버렸습니다. PDO를 기반으로하는 redbean을 사용하고 있습니다. – jonnnnnnnnnie