2010-01-24 2 views
14

저는 Wordpress를 CMS로 사용하는 응용 프로그램을 개발하고 있습니다.Wordpress를 사용하면 입력을 살균하는 가장 좋은 방법을 말해 줄 수 있습니까?

데이터베이스에 저장하기 전에 위생 처리해야하는 입력 필드가 많은 양식이 있습니다.
나는 자바 스크립트와 PHP 코드 및 기타 유해한 코드가 주입되는 것을 막고 싶다.

현재 데이터 자체를 살리기 위해 내 자신의 방법을 사용하고 있지만 WP가 사용하는 기능을 사용하는 것이 더 좋을 것이라고 생각합니다.

저는 Wordpress에서 Data Validation을 보았습니다. 그러나 나는이 기능들이 얼마나 많은 순서로 사용해야하는지 잘 모릅니다. 누구 WP 기능을 사용하는 것이 가장 좋은지 말할 수 있습니까?

은 현재 내가 수행하여 내 입력을 "살균"있어 다음

  1. 액센트 문자 (E, O, æ, ø, å) 데이터베이스에 재미있는 방법으로 저장 얻었 기 때문에 (비록 내 테이블이 ENGINE=InnoDB, DEFAULT CHARSET=utf8COLLATE=utf8_danish_ci으로 설정 되었더라도, 나는 htmlentities()를 사용하여 악센트를 가질 수있는 입력 필드를 변환 중입니다.

  2. 데이터를 입력하기 위해 SQL 문자열을 작성할 때 mysql_real_escape_string()을 사용합니다.

나는 공격을 막기에 충분하지 않다고 생각합니다. 그래서 개선 제안은 크게 감사드립니다.

답변

16

입력 "sanitisation"은 가짜입니다.

필터링 (*) 또는 이스케이프 입력을 사용하여 사출 사고로부터 자신을 보호하려고 시도해서는 안됩니다. 다른 문자열에 넣을 때까지 원시 문자열로 작업해야합니다. 이 시점에서 해당 컨텍스트에 대해 올바른 이스케이프 함수 (MySQL 쿼리의 경우 mysql_real_escape_string, HTML 출력의 경우 htmlspecialchars)가 필요합니다.

는 (* (워드 프레스는 원칙적으로 다르지 않습니다 esc_html 같은 자신의 이스케이프 기능을 추가합니다.) : 잘 제외하고는 응용 프로그램 별 요구 사항, 전자 메일 주소를 확인처럼 정말 전자입니다 메일 주소, 암호가 합당한 지 확인하는 등 입력 단계에서 제어 문자를 필터링하는 합리적인 방법이 있지만 실제로는 거의 수행되지 않습니다.)

htmlentities()를 사용하여 악센트를 가질 수 있습니다.

강력히 권고드립니다. 데이터베이스에는 원시 텍스트가 포함되어야합니다. HTML로 인코딩 한 경우 열에서 데이터베이스 작업을 수행하는 것이 훨씬 더 어려워집니다. <"과 같은 문자를 비 ASCII 문자와 동시에 이스케이프 처리합니다. 데이터베이스에서 데이터를 가져 와서 페이지에 복사하는 것보다 다른 이유로 사용하면 이제 데이터에 허위 HTML 이스케이프가 생겼습니다. 페이지에 텍스트를 쓰고있는 마지막 순간까지 HTML 이스케이프 처리를하지 마십시오.

비 ASCII 문자를 데이터베이스에 가져 오는 데 문제가있는 경우 HTML 인코딩 데이터 저장과 같은 지속 불가능한 해결 방법 대신 먼저 해결해야하는 다른 문제입니다.여기에 PHP와 데이터베이스가 적절한 UTF-8을 사용하도록하는 것에 대한 많은 게시물이 있지만 중요한 것은 HTML 출력 페이지 자체가 Content-Type 헤더/메타를 사용하여 UTF-8로 올바르게 제공되는지 확인하는 것입니다. 그런 다음 MySQL 연결이 UTF-8로 설정되어 있는지 확인하십시오 (예 : mysql_set_charset() 사용).

데이터를 입력하기 위해 SQL 문자열을 만들 때 mysql_real_escape_string()을 사용합니다.

는 예, 맞습니다. SQL 인젝션에 취약하지 않습니다. 은 템플릿 출력 끝 대신 데이터베이스 끝에서 HTML 이스케이프 처리를하는 경우 HTML 주입에 취약 할 수 있습니다 (XSS를 유발 함). 이 아닌 문자열 (예 : $_GET에서 직접 가져옴)이 HTML 이스케이프되지 않았으므로

+12

WP에서 SQL 쿼리를 수행하려면 mysql_real_escape_string을 사용하는 대신 $ wpdb-> prepare() 메소드를 사용해야합니다. WP API를 사용하고 싶다면. – nickohrn

관련 문제