2011-11-30 7 views
2

웹 응용 프로그램이 사용자가 지정된 언어 또는 로캘로 응용 프로그램을 현지화하기 위해 번역 메시지를 제공하도록 허용하는 경우이 문제와 관련된 잠재적 인 보안 위험은 무엇입니까? [명백한 사회 공학을 제외하고]현지화 메시지의 보안 위험 가능성

이러한 번역 메시지는 일반적으로 언어/라이브러리 등에 따라 일종의 형식의 키 - 값 쌍 모음입니다. 예를 들어, 많은 OSS의 PHP 배열 파일 PHP 응용 프로그램, gettext를 사용하는 응용 프로그램 용 getetxt .po 파일, Rails의 Yaml 파일 및 기타 여러 파일이 있습니다.

그런 변환 데이터를 사용하여 사이트에서 사용할 수있는 로케일 목록에 새 로캘을 제공합니다.

답변

1

솔직히 말해서 이상한 질문입니다. OWASP top 10을 읽고 이해했다고 가정합니다. 자신의 서버를 공격으로부터 보호하는 방법을 알고 있다고 가정합니다.

이 번역 시스템에 대한 가장 명백한 공격은 공격자가이 데이터 세트를 사용하여 모든 웹 사이트를 훼손시킬 수있는 영구 XSS입니다. "oah 우리가 값을 htmlencode"라고 말하는 것만으로는 충분하지 않습니다. 이러한 데이터 세트를 타사에 제공하는 경우 모든 사용자가 데이터를 제대로 위생 할 것으로 기대할 수는 없습니다. 설상가상으로 XSS는 an output problem입니다. HTML encode 전체 데이터 세트를 사용할 수 없으며 HTML 문서 내에서 데이터가 어떻게 사용될 것인지 전혀 모르기 때문에 100 % 안전 할 것으로 기대합니다. 문제는 데이터가 스크립트 태그 또는 이벤트 내에서 종료 될 수 있으며, html 인코딩의 보호가 완전히 무효화 될 수 있다는 것입니다. 나는 누군가 xss를 시도하고 멈추기 위해 strip_tags()을 사용하는 것을 볼 때 항상 웃으며, 이것은 잘못된 접근법이다. 이 요약에서

정말 문제에 대한 100 %의 해결책이 아니다, 그러나 이것은 대부분의 XSS를 방지 할 수 있습니다 :

$var=htmlspecialchars($var,ENT_QUOTES,"UTF-8"); 
$var=rtrim($var,"\\"); 

은 분명히 rtrim() 스크립트 태그 내에서 XSS를 방지하기 위해 사용된다. 문자열이 백 슬래시로 끝나면 따옴표로 묶은 문자열에서 벗어날 수 있습니다. 백 슬래시는 따옴표만큼 위험합니다.

+0

답변 해 주셔서 감사합니다. 나는 다양한 공격을 (어느 정도) 알고있다. 문제는 이것을 말하지 않지만 더 넓은 각도에서이 문제를 보려고합니다. 대부분의 (모든?) 앱은 110n 데이터의 단일 제어 지점을 가정하여 설계되었습니다. 다른 시나리오는 예를 들어 l10n 데이터가 제 3 자에 의해 유지되고 CDN을 통해 말하게됩니다. –

+0

@Basel Shishani 당신은 빨대를 쥐고 ​​있습니다. 나는 당신이 이국적인 문제에 너무 많은 시간을 보내고 있다는 것을 걱정합니다. 하루가 끝날 때 사람들이 해킹당하는 간단한 문제 일 때입니다. 영구 XSS는 공격자가 iframe을 도입하고 브라우저를 악용하거나 웹 사이트를 손상시킬 수있는 매우 심각한 취약점입니다. – rook

+0

@Basel Shishani 공격을받은 대부분의 손상된 웹 사이트에서 공격자는 서버에서 정교한 원격 코드 실행을 사용하여 기본 페이지에 간단한 iframe을 도입하여 브라우저를 악용했습니다. 첫 페이지에 저장된 xss는 대다수의 범죄자에게 가장 유용한 웹 애플리케이션을 이용합니다. – rook

1

콘텐츠의 통제권을 포기하자마자 "허가 된"콘텐츠 공급자가 원하는대로 무엇이든 추가 할 수 있습니다. 콘텐츠에 포함 된 잠재적 인 코드의 실행을 막을지라도 시스템의 진입 점에서 해당 텍스트를 화면에 표시하지 않으면 사용자에게 부적절한 텍스트 (또는 이미지)가 표시되는 것을 방지 할 수 없습니다.

이 문제를 해결하는 한 가지 방법은 컨텐츠 검증에 대한 의무를 명시한 컨텐츠 제공자와의 서비스 계약입니다. 제공자가 누구인지에 따라, 이것은 통제를 포기함으로써 당신을 편하게 만들 수 있습니다. 그렇지 않으면 공개 승인을 받기 전에 제출 된 모든 콘텐츠를 승인하는 애플리케이션의 소유자 조직을 가진 사람을 대신 할 사람이 거의 없습니다.

1

"새로운"문자열의 HTML 요소는 titlealt과 같은 몇 가지 특정 특성을 제외하고 이전 문자열에 있었던 것일 수 있다고 생각하는 것이 안전하다고 생각합니다.

예 :

  • 영어 문자열 : <strong title="Just a test">Hover this message</strong>
  • 네덜란드어 번역 : <strong title="Gewoon een test">Hang hier met de muis boven</strong> - 안전 표시됩니다
  • 네덜란드어 번역 : <strong onmouseover="window.location='something';">Hang hier met de muis boven</strong>이 필터에 의해 무효화 될 것이다

당신은 것 강력한 필터를 작성해야하며, 추가 된 속성, 제거되지 않은 HTML 요소가 없는지 항상 확인해야합니다. dded 또는 제거. 또한 항상 "'과 조심하십시오.

관련 문제