2011-12-11 8 views
1

최근 "기사 입력"페이지에서 NicEdit을 사용하기 시작했습니다. 그러나 보안 및 악용 방지에 대한 몇 가지 질문이 있습니다.NicEdit의 HTML POST 값을 어떻게 위생 처리합니까?

첫 번째 질문 : 나는 현재 "mysql_real_escape_string()은"내 데이터베이스 클래스로 모든 입력을 살균. 또한 htmlspecialchars (htmlentity (strip_tags ($ var)))를 사용하여 HTML 값을 삭제합니다.

"HTML 입력"을 데이터베이스에 추가 할 때 어떻게 위생을합니까? ?

두 번째 질문 : 나는이 질문을 만드는 동안, 거기에 질문 "비슷한 제목이"내가 한 번 읽혀질 그것은 자신의 유효한 템플릿 엉망 "학대 HTML 입력"에 대해 말하기 사람이었다.. (예 : 그냥 입력)

현재 시스템에서도 발생할 수 있습니다. PHP로 어떻게 처리해야합니까?

Ps. 나는 NicEdit을 계속 사용하고 싶다. 그래서 BBCode 시스템을 사용하는 것이 마지막 조언이되어야한다.

감사합니다.

답변

3
  1. mysql_real_escape_string는 텍스트 값을 탈출 가 유효/명확한/사출 안전 SQL 쿼리의 구문을 유지하기 위해, 위생 없습니다.
  2. strip_tags입니다. 고객님의 문자열은입니다. 모두 순서 htmlentitieshtmlspecialchars이 잔인한 월 단지 제대로 해석 데이터 수행
  3. . 그 직전에 태그를 벗기고 있기 때문에 두 배의 잔인한 행동입니다.
  4. 규칙은 데이터가 SQL 구문을 손상시키지 않도록하기 위해 데이터를 쿼리에 넣기 전에 mysql_real_escape_string 번으로 처리합니다. 또한 하나htmlspecialchars (권장) 또는htmlentities, 를 사용하여 HTML로 출력하기 전에 텍스트를 탈출 HTML로, 당신의 HTML 구문을 보호하고, 같은 일을.
  5. 이 모든 내용에 대한 심층 탐구는 The Great Escapism (Or: What You Need To Know To Work With Text Within Text)을 참조하십시오.
  6. NicEdit을 모르지만 사용자가 HTML을 사용하여 텍스트 스타일을 지정할 수 있다고 가정합니다. 그렇다면 왜 데이터에서 HTML을 제거하고 있습니까? 그렇다면 WYSIWYG 편집기를 사용할 필요가 없습니다.
+0

이 기사를 읽습니다. HTML에 자바 스크립트 코드를 작성하거나 사용자가 기본 HTML 리디렉션을 사용하여 삽입 된 (예 : 바이러스 링크) 사용자로 리디렉션하는 것에 대해 걱정했습니다. 여전히 자신의 HTML을 NicEdit 텍스트 영역에 포함시킬 수 있습니다. 왜 그 텍스트를 신뢰할 수 있습니까? – Aristona

+1

사실, * selective HTML이 전혀 입력되지 않는 일반적인 문제입니다.사용자를 전혀 신뢰하지 않는다면 HTML 만 있으면 모든 것을 탈출 할 수 있습니다. 사용자를 신뢰하는 경우 (사용자 라고만 말하기 때문에) 그대로 텍스트를 사용하십시오. 그 사이의 모든 것이 엉망이며 IMO는 HTML로 변환되는 Markdown과 같은 특수 마크 업 언어를 사용하여 가장 잘 해결됩니다. HTML을 선택적으로 위생 처리하는 것은 [HTML Purifier] (http://htmlpurifier.org/)와 같은 라이브러리를 사용하여 복잡하고 가장 잘 수행됩니다. – deceze

0

이것은 내 NICEDIT 응용 프로그램 중 하나에서 사용하고있는 기능이며 nicedit에서 제공되는 코드와 잘 작동하는 것 같습니다.

function cleanFromEditor($text) { 

    //try to decode html before we clean it then we submit to database 
    $text = stripslashes(html_entity_decode($text)); 

    //clean out tags that we don't want in the text 
    $text = strip_tags($text,'<p><div><strong><em><ul><ol><li><u><blockquote><br><sub><img><a><h1><h2><h3><span><b>'); 

    //conversion elements 
    $conversion = array(
     '<br>'=>'<br />', 
     '<b>'=>'<strong>', 
     '</b>'=>'</strong>', 
     '<i>'=>'<em>', 
     '</i>'=>'</em>' 
    ); 

    //clean up the old html with new 
    foreach($conversion as $old=>$new){ 
     $text = str_replace($old, $new, $text); 
    } 

    return htmlentities(mysql_real_escape_string($text)); 
} 
+0

이 좋을 것입니다.하지만, 왜 당신은 outgoing 데이터에 mysql_real_escape_string을 사용하고 있습니까? 이것은 SQL 주입을 방지하기위한 것입니다. –