2010-06-20 2 views
3

사용자가 양식 입력란에 입력 할 수있는 HTML 태그 유형을 제한하는 좋은 방법은 무엇입니까? 나는 클라이언트 측 (아마도 자바 스크립트 사용)을 할 수 있기를 바랄 것이다. PHP에서 서버 측은 사용자의 브라우저에 너무 무거울 수 있고 가능하다면 둘 모두의 조합 일 수도있다.사용자가 웹 양식에 입력 할 수있는 HTML 태그를 제한하거나 제한하는 방법. 고객 입장에서?

효과적으로 사용자가 Stackoverflow에서와 동일한 태그 세트와 표준 MathML 태그를 사용하여 데이터를 제출할 수 있기를 바랍니다. 양식에서 아시아 표의 문자를 포함한 UTF-8 텍스트를 받아 들여야합니다.

응용 프로그램에서 사용자는 기본 html 태그가있는 텍스트 항목을 제출할 수 있어야하며 해당 항목을 (잠재적으로) 표시 할 수 있어야합니다. 다른 사용자)에게 html이 올바르게 렌더링되어 사용자에게 안전합니다. 내 db 서버 쪽을 보호하기 위해 htmlspecialchars()htmlspecialchars_decode()을 사용할 계획입니다.

많은 감사,

JDelage

PS : 나는 검색하지만

+6

의견을 보내려면이 클라이언트 측을 수행하는 것이 좋습니다. 또한 서버 측에서 확인해야합니다. 악의적 인 스크립트를 삽입하려고 시도하는 사용자는 클라이언트 쪽 검사를 무시할 수 있습니다. 이러한 사용자는 원하지 않는 HTML을받지 못하도록 막는 사람입니다. –

+0

Duh ... 물론, 당신 말이 맞아요. 고마워! – JDelage

답변

3

당신이 입력을 필터링 찾는 경우 등 XSS 공격을 전년도 ...이 질문을 찾을 수 없습니다, 사용을 고려 HTML Purifier과 같은 기존 라이브러리 나는 아직 그것을 사용하지 않았지만 많은 것을 약속하고 높은 평가를 받고있다.

HTML 정수기는 PHP로 작성된 표준 호환 HTML 필터 라이브러리입니다. HTML 정수기는 그것은 또한 문서는 W3C의의 포괄적 인 지식 만 달성, 뭔가 표준을 준수해야합니다 것, 철저하게 감사, 보안 아직 허용 허용 된 사이트 목록과 (더 XSS이라고도 함) 모든 악성 코드를 제거하지 않습니다 명세서.

+0

입력 해 주셔서 감사합니다. 이것은 약간 복잡해 보입니다. 나는 전에 도서관에서 일한 적이 없다 ... – JDelage

+1

@JDelage 그래, 시간이 좀 걸리 겠지만, 나는 스스로 모든 잠재적 인 위험을 제거하기 시작하는 것보다 훨씬 쉽다고 확신한다. –

+0

충분합니다. 다른 문제는 사용자에게 할 수있는 것과 할 수없는 것에 대해 설명하는 것입니다. 단순히 "귀하의 코드는 허용되지 않습니다"라고 단순히 말하고 싶지는 않습니다. – JDelage

0

정규 표현식에 익숙하다면 당신은 같은 것을 할 수 있습니다 :

<?php 

function parse($string) 
{ 
//To stop unwanted HTML tags being used 
$string = str_replace("<","&lt;",$string); //Replace all < with the HTML equiv 
$string = str_replace(">","&gt;",$string); //Replace all > with the HTML equiv 

$find = array(
"%\*\*\*(.+?)\*\*\*%s", //Search for ***any string here*** 
"%`(.+?)`%s",   //Search for `any string here` 
); 

$replace = array(
"<b>\\1</b>",           //Replace with <b>any string here</b> 
"<span style=\"background-color: #DDDDDD\">\\1</span>" //Replace with <span style="background-color: #DDDDDD">any string here</span> 
); 

$string = preg_replace($find,$replace,$string); //Do the find and replace 
return $string; //Return the output 
} 

echo parse("***Hello*** `There` <b>Friend</b>"); 
?> 

출력 :

안녕하세요There < b>을 친구 </b>을

+0

대신 진짜 markdown 파서를 얻으십시오;) – ThiefMaster

0

strip_tags을 사용하는 것이 쉬운 방법이며 허용하는 태그 만 지정하는 것이 좋습니다.

0

나는 얼마 동안 비슷한 문제가있었습니다. <script>alert('Hello');</script> 또는 그런 식으로 몇 가지 덧글을 게시하려는 일부 $ %^& *)가있었습니다. 피곤하고 작은 기능을 만들었습니다. 허용하는 데 도움이되었습니다. 메시지의 일반적인보기에는 또는 <br /> 태그 만 허용됩니다. PHP로만 만들었지 만 도움이 될 것으로 생각합니다.

function eliminateTags($msg) { 
    $setBrakes = nl2br($msg); 
    $decodeHTML = htmlspecialchars_decode($setBrakes); 

    # Check PHP version 
    if(version_compare(PHP_VERSION, '5.2') == 1) { 
     $withoutTags = strip_tags($decodeHTML, "<br />"); 
    } else { 
     $withoutTags = strip_tags($decodeHTML, "<br>"); 
    } 
    return $withoutTags; 
} 
관련 문제