어떻게 HTML 인코딩하는 모든 출력 웹 응용 프로그램에서는?

StackOverflow https://stackoverflow.com/questions/58694

  •  09-06-2019
  •  | 
  •  

문제

내가 원하는 XSS 공격을 방지하기 위해서 웹 응용 프로그램입니다.내가 찾는 것은 HTML 인코딩을 출력할 수 있는 정말 방지 XSS 공격입니다.지금 문제는 어떻게 HTML 인코딩하는 모든 단일 출력에서 내 응용 프로그램?내가 있는 방법을 자동화하는 이?

감사에 대한 답변 JSP,ASP.net PHP.

도움이 되었습니까?

해결책

당신이 원하지 않는 인코딩하는 모든 HTML,당신은 단지고 싶은 HTML 인코딩 모든 사용자 입력을 당신이 출력.

PHP: htmlentitieshtmlspecialchars

다른 팁

는 당신 할 필터 입력 데이터를 제공합니다.사람들은 종종 좋은 이 때문에,그것은 쉬운 솔루션이지만,그것은 문제입니다.

입력 전달할 수 있는 데이터는 여러 곳,게다가 출력되는 HTML.그것이 저장될 수 있는 데이터베이스에서,예를 들어.에 대한 규칙을 필터링 데이터 전송되는 데이터베이스에서 매우 다른 규정에 대한 필터링 HTML 을 출력한다.는 경우에 당신은 HTML 인코딩에 모든 입력을 사용하려면,당신은 끝날 것으로 HTML 데이터베이스에서.(이것은 또한 이유 PHP 의"마법의 따옴표를"기능은 나쁜 생각이 아니다.)

할 수 없습니다 예측 모든 장소는 당신의 입력 데이터는 여행을 것입니다.안전한 접근 방식을 준비하는 것이 데이터 그것이다.를 보내는 경우여 데이터베이스로 탈출 단일세.는 경우 HTML 을 출력하 탈출,HTML 엔터티입니다.그리고 일단 그것이 어딘가에 보내는 경우,당신은 여전히 작업하는 데 필요한 데이터를 사용하여 원 un-출 버전입니다.

이것은 더 많은 작업을,하지만 당신이 그것을 줄일 수 있습니하여 템플릿을 사용하여 엔진이나 라이브러리입니다.

에 대한 Jsp,당신은 당신의 것으로,c:태그를 탈출 XML 기본적으로 합니다.이 바인딩할 수 있습니다 당신의 속성으로 원하는 요소:

<input name="someName.someProperty" value="<c:out value='${someName.someProperty}' />" />

을 때에 바인딩하는 문자열 someName.someProperty 포함됩니다 XML 입력하지만,때 출력되는 페이지로,그것은 자동으로 탈출했을 제공하는 XML entities.이것은 특히 유용한 링크 페이지에 대한 유효성 검사를 수행합니다.

좋은 방법을 사용하여 모든 사용자 입력을 작성하여 수정을 위한 멋지 wich 탈출한 모든 변수는 템플릿에 전달;것을 제외하고는 있|unescape 연결되어 있습니다.는 방법 당신은 당신만을 제공 HTML 액세스하는 요소를 명시적으로 제공에 액세스 할 수 있습니다.

나는 없다는 수정 사지에 대해 동일한 버전이 여기에서 찾을 수 있습니다:

http://www.madcat.nl/martijn/archives/16-Using-smarty-to-prevent-HTML-injection..html

에서 새로운 Django1.0 릴리스를 이 작품이 정확히 동일한 방식으로,제이:)

나 개인적인 환경 설정이 성실하게 인코딩 아무것도 는 오는 데이터베이스에서,비즈니스 레이어에서 또는 사용자.

에 ASP.Net 이것은 사용하여 수행 Server.HtmlEncode(string) .

그 이유는 그래서 인코딩 아무것도도 특성할 수 있다고 가정하 boolean 또는 숫자 수 악성 코드가 포함되어 있(예를 들어,값을 확인란,만약 그들이 부적절하게 수행될 수 있로 돌아 오는 문자열입니다.하지 않은 경우 인코딩을 그들에게 보내기 전에 사용자에게 출력,다음 당신은 당신의 취약점).

할 수 있 포장 에코/인쇄 등입니다.에서 자신의 방법을 사용하여 다음을 수행할 수 있습니다 탈출을 출력한다.즉대

echo "blah";

myecho('blah');

수도가 있는 두 번째 매개 변수는 꺼 탈출하는 경우에 당신은 그것을 필요합니다.

하나의 프로젝트에서는 디버그 모드에서 출력 기능을 하는 모든 출력한 텍스트가를 통해 우리의 방법이 보이지 않습니다.그런 다음 우리는 아무것도 왼쪽 화면에 없었던 탈출!매우 유용한 추적하는 사람들이 나쁜 이스케이프 비트는 다음과 같습니다.)

는 경우에 당신은 실제로 HTML 인코딩하는 모든 단일 출력,사용자에게 일반 텍스트의<html>신의 작동하는 웹 응용 프로그램입니다.

편집:는 경우 HTML 을 인코딩 매력,당신은 문제가 받아들이 외부 암호를 포함하는 < 등등....

유일한 방법은 진정한 자신을 보호에 대하여 이러한 종류의 공격은 엄격한 필터는 모든의 입력을 허용하는 특히,(지 않지만 독점적으로)에서의 공용 영역 응용 프로그램입니다.는 것이 좋습을 살펴 모리스의 다니엘 PHP 필터링 클래스 (완벽한 솔루션)도 Zend_Filter 패키지(클래스의 컬렉션을 구축하는 데 사용할 수 있는 자신의 필터).

PHP 나의 언어를 선택하는 웹 개발,그래서 사과에 대한 편견에 내 대답이다.

키어런.

OWASP 는 API 를 인코딩하는 HTML 을 출력하거나 사용하여 HTML 문자(예:단락 또는 <textarea> 콘텐츠)으로 또는 속성의 값(예:대 <input> 후에 태그를 거부 양식):

encodeForHTML($input) // Encode data for use in HTML using HTML entity encoding
encodeForHTMLAttribute($input) // Encode data for use in HTML attributes.

프로젝트(PHP 버전)에서 호스팅 http://code.google.com/p/owasp-esapi-php/ 할 수 있습니다 몇 가지 다른 언어,예를 들어,.NET.

기억해야 하는 인코딩 모든 것 (하지만 사용자 입력),고 늦은 가능 (지를 저장할 때에 DB 를 하지만 출력할 때는 HTTP 응답).

출력코딩이 가장 좋다.검증하는 입력한 많은 이유는,그러나 100%다.는 경우에 데이터베이스에 감염된 XSS 를 통해 공격(즉ASPROX),과오나 악의적 인력 검증은 아무것도 하지 않습니다.출력 인코딩은 여전히 작동합니다.

가 있었던 에세이에서 조엘에서 소프트웨어(만드는 잘못된 코드 보는 잘못된 생각이에요 전 그렇지 않으면 내가 있는 URL 을 위해 당신)으로 덮여의 올바른 사용 헝가리 notation.짧은 버전 같은 것:

Var dsFirstName, uhsFirstName : String;

Begin

uhsFirstName := request.queryfields.value['firstname'];

dsFirstName := dsHtmlToDB(uhsFirstName);

기본적으로 접두사 당신의 변수와 같은 뭔가 "우리" 안전하지 않은 문자열 "ds" 를 위한 데이터베이스에 안전하고, "hs" HTML 안전합니다.당신만 원하는 인코딩 및 디코딩하는 곳에 당신은 실제로,그것을 필요로하지 않는 모든 것입니다.그러나 사용하여 그들이 접두사는 유추한 유용한 의미를 찾고에 코드를 부른 경우가 옳지 않다.고 당신이 필요 해요 다른 인코딩/디코딩 기능입니다.

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