2008-11-14 4 views
3

언제 Microsoft.Security.Application.AntiXss.HtmlEncode으로 전화하십니까? 사용자가 정보를 제출하거나 정보를 표시 할 때 수행합니까?입력 또는 출력 중에 HtmlEncode합니까?

이름, 성, 도시, 주, 우편 번호와 같은 기본 정보는 어때요?

답변

4

데이터를 데이터베이스에 저장하기 직전인지 아니면 화면에 표시 할 때 마지막 순간에만 데이터를 인코딩하거나 이스케이프해야합니다. 너무 빨리 인코딩하면 우연히 이중 인코딩 될 위험이 있습니다 (종종 초보자 웹 사이트에 &이 표시됨 - 직접 포함).

인코딩보다 빨리 인코딩하려면 이중 인코딩을 피하기위한 조치를 취하십시오. Joel은 헝가리 표기법에 대한 좋은 사용법에 대한 기사를 썼다. 여기서 그는 접두어를 사용하여 변수에 저장된 것을 판별했다. 예 : 안전하지 않은 문자열의 경우 'us', 안전한 문자열의 경우 'ss' 선택하지 않은 중 하나를 떠나는 문제에 대한 질문입니다 -

usFirstName = getUserInput('firstName') 

ssFirstName = cleanString(usFirstName); 

는 또한 (도시, 우편 번호 등) 정보의 유형이 무엇인지는 중요하지 않습니다.

+1

'us'는 안전하지 않은 것을 나타내고 'ss'는'supersafe'를 나타냅니다. :디 – LiraNuna

12

정보를 표시 할 때 수행하십시오. 입력 된대로 원본을 보존하고 웹 페이지에 표시하기 위해 변환하십시오. Excel로 내보내는 것과 같이 다른 방식으로 표시한다고 가정 해 보겠습니다. 이 경우 보존 된 원본을 내보내려고합니다.

모든 단일 문자열을 인코딩합니다.

2

상황에 따라 다릅니다. 제가 일하는 곳에서 수년간 회사는 HTML 인코딩을하지 않았기 때문에 우리가 시작했을 때 사용자 입력이 페이지에 표시 될 수있는 시스템 내의 모든 위치를 찾는 것이 거의 불가능했을 것입니다.

입력 포인트가 출력 포인트보다 적기 때문에 입력을 시스템에 입력 할 때 위생 처리를 선택했습니다. DB에 데이터를 입력하기 직전에 위생 처리를 실시하지만 Microsoft의 AntiXss 라이브러리를 사용하지는 않지만 입력 유형에 따라 HTML 태그 및 문자의 범위를 허용 목록 작성하는 홈 브루 (homebrew) 메소드 세트를 사용합니다.

처음부터 시스템을 설계하거나 출력을 인코딩 할 수있는 시스템이 작거나 잘 관리되어 있다면 Corey의 제안을 따르십시오. 그것은 확실히 더 좋은 방법입니다.

1

인코딩은 데이터의 속성이 아니며 전송 메커니즘의 속성입니다. 따라서 데이터를 수신 할 때 데이터의 인코딩을 해제하고 전송 전에 적절히 인코딩해야합니다. 전송 메커니즘은 필요한 인코딩의 종류를 결정합니다.

이 원리는 전송 메커니즘이 HTML, HTTP, 연기 신호인지 여부를 결정합니다. 트릭은 인코딩 유형을 수동으로 수행하는 방법과 다양한 프레임 워크가 자동으로 단계를 수행하는 방법을 알고 있습니다. 예를 들어, ASP.NET은 System.Web.UI.WebControls.Button의 텍스트에 할당 된 데이터를 인코딩하지만 System.Web.UI.WebControls.Literal 텍스트에 할당 된 텍스트는 인코딩하지 않습니다. jQuery는 .innerText()를 사용하여 설정 한 내용을 인코딩하지만 .innerHtml()을 사용하여 설정 한 내용은 인코딩하지 않습니다.

관련 문제