문제

웹 기반 애플리케이션을 개발할 때 사용자로부터 다양한 형식의 텍스트를 허용하려면 해당 입력을 허용하는 방법을 선택해야 합니다.HTML을 삭제하는 것이 더 어렵기 때문에 다양한 마크업 언어가 만들어졌습니다.

다음과 같은 다양한 마크업 언어의 장점과 단점은 무엇입니까?

또는 다르게 말하면 특정 마크업 언어를 사용하기로 선택할 때 어떤 요소를 고려합니까?

도움이 되었습니까?

해결책

Markdown, BBCode, Textile, Mediawiki Markup은 모두 기본적으로 동일한 일반 개념이므로 HTML과 일반 텍스트 마크 업이라는 두 가지 범주로 이것을 실제로 묶을 것입니다.

HTML

HTML과의 거래는 콘텐츠가 이미 웹 컨텐츠를위한 "프리젠 테이블"형식입니다. 그것은 훌륭하고, 처리 시간을 절약하고, 쉽게 구문 분석 할 수있는 언어입니다. HTML 컨텐츠를 처리하고 HTML에서 다른 형식으로 변환하기위한 거의 모든 언어로 수십 개의 라이브러리가 있습니다. 주요 단점은 초기 웹 일의 느슨한 표준으로 인해 HTML이 엄청나게 가변적 일 수 있으며 가능하다는 것입니다. 'T는 사용자로부터 HTML을 수락 할 때 항상 제정신 입력에 의존합니다. 지적했듯이, HTML을 정리하거나 산화하는 것은 종종 매우 어렵습니다. 특히 XML이하는 방식을 정상적인 마크 업 규칙을 따르지 않기 때문에 (즉, 부적절하게 닫힌 태그가 일반적입니다).

일반 텍스트 마크 업

이 범주는 다음과 같은 이유로 자주 사용됩니다.

  • 하나의 소스에서 여러 형식으로 구문 분석하기 쉽습니다 -PDF, HTML, RTF
  • 컨텐츠는 HTML에서 추출 할 필요가 아니라 나중에 필요한 경우 읽기 가능한 일반 텍스트 (일반적으로 RAW HTML보다 읽기가 훨씬 쉽습니다)에 저장됩니다.
  • HTML이 성가신 변수가되고 구조화되지 않은 특정 정의 규칙을 따릅니다.
  • 전체 HTML을 허용하는 것보다 많은 경우에 더 적합한 컨텐츠 형식의 서브 세트를 강제로 사용할 수 있습니다.
  • HTML의 서브 세트를 강제하는 것 외에도 입력을 쉽게 소독하고 크로스 사이트 스크립팅 문제를 방지 할 수 있습니다.
  • "RAW"데이터를 추상 형식으로 유지하면 나중에 사이트를 HTML 4에서 XHTML로 변환하려는 경우 구문 분석 코드 만 변경하면됩니다. HTML 형식의 사용자 입력을 사용하면 이제 모든 HTML을 XHTML로 개별적으로 변환해야합니다. HTML Tidy가 항상 간단한 작업은 아닙니다. 마찬가지로 새로운 마크 업 언어가 어느 시점에서 나오거나 대체 형식 (RTF, PDF, TEX)으로 이동 해야하는 경우 텍스트 형식 형식의 추상화 된 서브 세트는 훨씬 간단한 작업을 수행합니다.

결론은 사용중인 사용자 입력입니다. 데이터를 주변에 보관할 계획이고 형식 등을 셔플 해야하는 경우 신중한 추상 형식을 사용하여 정보를 저장하는 것이 합리적입니다. 어떤 이유로 든 원시 데이터로 수동으로 작업 해야하는 경우 해당 형식을 쉽게 읽을 수있는 경우 보너스 포인트가 있습니다. 웹 페이지 (또는 보고서 등의 HTML 문서)에만 컨텐츠를 표시하고 IT를 변환하거나 향후 방지하는 것에 대해 우려가 없다면 HTML에 저장하는 것이 합리적인 관행입니다.

다른 팁

제프 장단점에 대해 논의했습니다 CodingHorror.com에서 그들이 함께 모이는 초기 단계에있는 동안. 나는 그것이 가치있는 읽기라고 생각했다.

@netrox 데이터베이스는 문제가 아니며 브라우저 출력은 문제입니다.

유일한 관심사는 사용자가 삽입한 HTML에 의해 깨질 수 있는 최종 렌더링입니다.예를 들어 사용자는 <li> 태그를 지정하고 절대 닫지 마세요. 페이지 구성 방식에 따라 뒤따르는 전체 레이아웃이 깨질 수 있습니다.또는 다른 예를 들어 <strong> 닫지 않고 태그를 추가하면 나머지 내용이 모두 굵게 표시됩니다.

따라서 허용된 태그의 유효성을 검사해야 할 뿐만 아니라 정확히 어떻게 일부 태그는 허용하고 다른 태그는 허용하지 않습니까?왜냐하면 다음을 사용하여 모든 HTML 태그의 구문 분석을 방지하는 것이 매우 쉽기 때문입니다. htmlspecialchars() 예를 들어 PHP 메서드를 사용할 수 있지만 일부 태그를 허용하려면 다른 방법을 찾아야 합니다.거기에는 strip_tags() 허용되지 않는 태그를 제거(완전히 삭제)하는 PHP 기능입니다. 그러나 이는 사용자의 콘텐츠를 나쁜 방식으로 변경하여 사용자가 간단한 코드(예: 처리할 코드가 아닌 공유/표시할 코드)를 게시하는 것을 방지하는 것을 의미합니다.

레이아웃을 깨는 것 외에도 링크의 href 속성에 자바스크립트를 삽입하는 것과 같은 XSS 공격을 고려해야 합니다. 예를 들어 사용자를 다른 사이트로 리디렉션할 수 있습니다.가능한 XSS 공격의 긴 목록을 참조하십시오. https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

보시다시피 모든 HTML 태그가 해석되지 않도록 방지하는 것은 매우 쉽지만 일부 태그만 방지하는 것은 훨씬 더 복잡합니다.그것을 이해하려면 거대한 "HTML 정화기" 프레임워크의 유일한 목적은 일부 HTML 태그를 허용하고 출력된 HTML이 유효한지 확인하는 것입니다(예:페이지가 깨지지 않으며 XSS 공격이 없습니다.

"HTML을 소독하기가 더 어려워서 많은 다른 마크 업 언어가 만들어졌습니다."

진짜? 어떻게 어렵습니까? 데이터베이스 또는 파일에 입력하기 전에 잠재적으로 위험한 속성 또는 태그를 제거하고 HTML을 검증하는 기능이 있습니다. HTML을 소독하기 어려운 방법에 대한 예를 들어 줄 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top