Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
nahsra__antisamy_CVE-2017-14735_1-5-6 — 신뢰할 수 없는 소스로부터의 빠르고 구성 가능한 HTML 살균을 위한 Java 라이브러리. 정책 기반 스캐닝을 사용하여 악성 JavaScript 및 CSS를 제거하여 웹 애플리케이션에서 XSS 공격을 방지합니다. | Kitploit
도구/GitHubGitHub/shoucheng3/nahsra__antisamy_cve-2017-14735_1-5-6
Static AnalysisVulnerability AnalysisCode AnalysisWeb SecurityMisconfigurationAPI Security
GitHubshoucheng3/nahsra__antisamy_cve-2017-14735_1-5-6

nahsra__antisamy_CVE-2017-14735_1-5-6

신뢰할 수 없는 소스로부터의 빠르고 구성 가능한 HTML 살균을 위한 Java 라이브러리. 정책 기반 스캐닝을 사용하여 악성 JavaScript 및 CSS를 제거하여 웹 애플리케이션에서 XSS 공격을 방지합니다.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
저장소 보기
29개월 전아직 검토되지 않음
공유

AntiSamy

신뢰할 수 없는 소스에서 들어오는 HTML을 빠르고 설정 가능하게 정리하는 라이브러리입니다. Java 8 이상을 지원합니다.

다른 말로 표현하자면: 클라이언트가 프로필, 댓글 등에 제공하는 HTML에 악성 코드를 포함하지 않도록 서버에 저장되기 전에 검증하는 API입니다. 웹 애플리케이션에서 '악성 코드'는 일반적으로 'JavaScript'를 의미합니다. 대부분의 경우, CSS(Cascading Stylesheets)는 JavaScript를 호출할 때만 악성으로 간주됩니다. 하지만 '정상적인' HTML과 CSS도 악의적인 방식으로 사용될 수 있는 여러 상황이 있습니다.

중요! - 1.7.0의 API 호환성이 깨지는 변경 사항

1.6.x 시리즈 개발 과정에서 여러 기능과 API를 식별하고 폐기(deprecated)했습니다. 이러한 모든 폐기된 항목은 1.7.0 릴리스에서 제거되었습니다. 이 변경 사항들은 모두 이슈에서 추적되었습니다: https://github.com/nahsra/antisamy/issues/195. 각 변경 사항은 아래에 설명되어 있습니다:

CssHandler의 생성자 2개에서 LinkedList<URI> embeddedStyleSheets 매개변수가 제거되었습니다. 이제 두 생성자 모두 내부적으로 빈 LinkedList<URI>를 생성하며, 필요한 경우 getImportedStylesheetsURIList() 메서드를 사용하여 해당 참조를 얻을 수 있습니다. 이 기능은 거의 사용되지 않으며, 실제로 이러한 생성자를 직접 호출하는 경우도 드물기 때문에 이 변경이 대부분의 AntiSamy 사용자에게 영향을 미치지 않을 것입니다. 사용할 때는 일반적으로 빈 리스트가 이 매개변수 값으로 전달되며 그 리스트는 다시 사용되지 않습니다.

  • CssHandler(Policy, LinkedList<URI>, List<String>, ResourceBundle) 시그니처가 제거되었습니다.

  • 다음으로 대체되었습니다: CssHandler(Policy, List<String>, ResourceBundle)
  • CssHandler(Policy, LinkedList<URI>, List<String>, String, ResourceBundle) 시그니처가 제거되었습니다.

    • 다음으로 대체되었습니다: CssHandler(Policy, List<String>, ResourceBundle, String). 참고: 이 메서드의 마지막 두 매개변수 순서가 반전되었습니다.
  • XHTML 지원이 중단되었습니다. 이제 AntiSamy는 HTML만 지원합니다. 이 기능이 거의 사용되지 않을 것으로 생각되므로 많은 AntiSamy 사용자에게 영향을 미치지 않을 것으로 예상합니다.

  • 이제 AntiSamy 정책 파일에 XML 스키마 검증이 필수이며 비활성화할 수 없습니다. AntiSamy와 함께 사용하려면 정책 파일이 스키마를 준수해야 합니다.

  • noopenerAndNoreferrerAnchors 정책 지시문이 이제 기본적으로 켜져 있습니다. 비활성화하면 AntiSamy가 경고를 발생시켜 활성화를 권장합니다.

  • 출력 형식 고지 사항

    AntiSamy의 업그레이드 수명 주기 동안 HTML 파서 종속성이 변경되어 사용 사례에 따라 출력 차이가 발생할 수 있습니다. 특정 버전을 사용하다가 업그레이드 후 다른 출력을 얻는 경우 이를 고려하십시오.

    이는 내부 HTML 표현을 도구의 최종 텍스트 출력으로 변환하는 출력 직렬화기에도 적용될 수 있습니다.

    외부 스타일시트 지원 중단

    AntiSamy 팀은 원격 CSS 삽입을 허용하는 기능이 위험하다고 판단하여 이 기능을 폐기하고 향후 릴리스에서 제거할 예정입니다. 이 기능의 사용자는 거의 없을 것으로 예상합니다.

    이 기능이 호출되면 로그 경고(WARN)를 추가했습니다. 사용 중이라면 이 기능을 활성화하지 않는 기본 CssScanner 생성자로 전환하여 이 기능을 비활성화/제거하십시오.

    사용 방법

    1. 의존성 가져오기

    먼저 Maven에서 의존성을 추가합니다:

    root@kitploit:~
    <dependency>
       <groupId>org.owasp.antisamy</groupId>
       <artifactId>antisamy</artifactId>
       <version>LATEST_VERSION</version>
    </dependency>
    

    2. 기본 정책 파일 선택

    사이트의 AntiSamy 사용 사례는 적어도 대략적으로 미리 정의된 정책 파일 중 하나와 비슷할 가능성이 높습니다. 각 파일은 사용자가 HTML(및 가능하면 CSS) 형식 정보를 제공할 수 있도록 허용하는 '전형적인' 시나리오를 나타냅니다. 다양한 정책 파일을 살펴보겠습니다:

    1. antisamy-slashdot.xml

    Slashdot은 사용자가 매우 제한된 HTML 마크업으로 뉴스 게시물에 익명으로 응답할 수 있는 기술 뉴스 사이트입니다. Slashdot은 가장 멋진 사이트 중 하나일 뿐만 아니라 여러 성공적인 공격의 대상이 되기도 했습니다. Slashdot의 규칙은 상당히 엄격합니다: 사용자는 다음 HTML 태그만 제출할 수 있으며 CSS는 사용할 수 없습니다: <b>, <u>, <i>, <a>, <blockquote>.

    따라서 상당히 유사한 기능을 허용하는 정책 파일을 구축했습니다. 글꼴, 색상 또는 강조에 직접 작용하는 모든 텍스트 서식 태그가 허용됩니다.

    1. antisamy-ebay.xml

    eBay는 우리가 아는 한 우주에서 가장 인기 있는 온라인 경매 사이트입니다. 공개 사이트이므로 누구나 풍부한 HTML 콘텐츠로 리스팅을 게시할 수 있습니다. eBay가 공격 대상으로서 매력적인 점을 고려하면 몇 가지 복잡한 XSS 공격을 받은 것은 놀라운 일이 아닙니다. 리스팅에는 Slashdot보다 훨씬 더 풍부한 콘텐츠가 포함될 수 있으므로 공격 표면이 상당히 넓습니다.

    1. antisamy-myspace.xml

    MySpace는 이 프로젝트가 시작될 당시 가장 인기 있는 소셜 네트워킹 사이트였습니다. 사용자는 JavaScript를 포함하지 않는 한 원하는 거의 모든 HTML과 CSS를 제출할 수 있었습니다. MySpace는 단어 블랙리스트를 사용하여 사용자의 HTML을 검증했으며, 이것이 악명 높은 Samy 웜의 대상이 된 이유입니다. Samy 웜은 차단되어야 했던 단어(eval)와 결합된 조각화 공격을 사용했으며, 이 프로젝트의 영감이 되었습니다.

    1. antisamy-anythinggoes.xml

    이 정책 파일의 가능한 사용 사례는 알려져 있지 않습니다. 모든 유효한 HTML 및 CSS 요소를 허용하려는 경우(단, JavaScript 또는 명백한 CSS 관련 피싱 공격 없이) 이 정책 파일을 사용할 수 있습니다. MySpace조차 이렇게까지 하지는 않았습니다. 그러나 모든 요소에 대한 기본 규칙을 포함하고 있기 때문에 다른 정책 파일을 맞춤화할 때 지식 기반으로 사용할 수 있는 좋은 참고 자료가 됩니다.

    로깅

    이제 AntiSamy는 로깅을 위해 slf4j-simple 라이브러리를 포함하지만, AntiSamy 사용자는 원하는 경우 대체 slf4j 호환 로깅 라이브러리를 가져와 사용할 수 있습니다. 또한 원한다면 slf4j-simple을 제외할 수도 있습니다.

    경고: AntiSamy가 slf4j-simple을 구성 파일 없이 사용하면 메시지를 버퍼링 방식으로 표준 출력에 기록합니다. 따라서 PolicyException과 같은 예외가 발생하면 이러한 로그 메시지의 일부 또는 전체가 손실될 수 있습니다. 이는 slf4j-simple을 표준 오류에 기록하도록 구성하거나 그렇게 하는 대체 slf4j 로거를 사용하여 해결할 수 있습니다.

    3. 정책 파일 맞춤화

    기본 구성으로 AntiSamy를 배포하고 싶을 수도 있지만, 사이트에서 사용자가 허용할 수 있는 항목에 대해 엄격한 비즈니스 중심 규칙을 원할 가능성도 있습니다. 맞춤화를 결정하는 논의에서는 공격 표면(정책 파일에 비례하여 증가함)도 고려해야 합니다.

    예제 정책은 각 태그의 요구 사항에 따라 조정 및 테스트할 수 있습니다. 지정할 수 있는 지원되는 태그 동작은 다음과 같습니다:

    • filter: 태그를 제거하지만 콘텐츠는 유지합니다.
    • validate: 규칙을 통과하는 한 콘텐츠를 유지합니다.
    • remove: 태그와 콘텐츠를 제거합니다.
    • truncate: 태그 속성과 모든 하위 태그(텍스트 콘텐츠가 있는 경우 제외)를 제거합니다.
    • encode: filter와 유사하지만 태그를 HTML로 인코딩하여 원시 텍스트로 보존하고 하위 요소는 계층에서 한 단계 위로 이동합니다.

    4. AntiSamy API 호출

    AntiSamy 사용은 쉽습니다. 다음은 정책 파일로 AntiSamy를 호출하는 예제입니다:

    root@kitploit:~
    import org.owasp.validator.html.*;
    
    Policy policy = Policy.getInstance(POLICY_FILE_LOCATION);
    
    AntiSamy as = new AntiSamy();
    CleanResults cr = as.scan(dirtyInput, policy);
    
    MyUserDAO.storeUserProfile(cr.getCleanHTML()); // some custom function
    

    Policy 객체를 생성하는 몇 가지 방법이 있습니다. getInstance() 메서드는 다음 중 하나를 인수로 받을 수 있습니다:

    • String 파일 이름
    • File 객체
    • InputStream
    • Policy 파일은 파일 이름으로 참조할 수도 있으며, 다음 예제와 같이 AntiSamy#scan() 메서드에 두 번째 인수를 전달합니다:
    root@kitploit:~
    AntiSamy as = new AntiSamy();
    CleanResults cr = as.scan(dirtyInput, policyFilePath);
    

    마지막으로, 정책 파일은 두 번째 매개변수에 File 객체로 직접 참조할 수도 있습니다:

    root@kitploit:~
    AntiSamy as = new AntiSamy();
    CleanResults cr = as.scan(dirtyInput, new File(policyFilePath));
    

    5. CleanResults 분석

    CleanResults 객체는 많은 유용한 정보를 제공합니다.

    • getCleanHTML() - 정리되고 안전한 HTML 출력
    • getCleanXMLDocumentFragment() - getCleanHTML()에 반영된 정리되고 안전한 XMLDocumentFragment
    • getErrorMessages() - 문자열 오류 메시지 목록 -- 0을 반환한다고 해서 공격이 없었다는 의미는 아닙니다!
    • getNumberOfErrors() - 오류 메시지 수 -- 다시 말하지만, 0이 입력이 안전하다는 의미는 아닙니다!
    • getScanTime() - 스캔 시간(초 단위) 반환

    중요 참고: getErrorMessages() 메서드에 대해 많은 혼란이 있었습니다. getErrorMessages() 메서드(또는 getNumberOfErrors())가 빈 목록을 반환한다고 해서 '이 입력이 안전한가?'라는 질문에 긍정적으로 대답하는 것은 아닙니다. 반드시 정제된 입력을 사용해야 하며, 전달된 입력에 공격이 없었다고 확신할 수 있는 방법은 없습니다.

    살균(sanitizer)의 효과에 중요한 직렬화 및 역직렬화 프로세스는 의도적으로 손실이 많으며 여러 공격 벡터를 통해 공격을 필터링합니다. 불행히도 이 전략의 절충 중 하나는 AntiSamy가 사후에 공격이 있었는지 항상 알 수 없다는 것입니다. 따라서 getErrorMessages() 및 getNumberOfErrors() API는 개발자가 공격이 있었는지 감지하는 데 도움이 되는 것이 아니라, 사용자의 의도가 좋은 입력이 시스템 요구 사항을 충족하는지 이해하는 데 도움을 주기 위해 존재합니다.

    기타 문서

    추가 문서는 이 GitHub 프로젝트의 위키 페이지(https://github.com/nahsra/antisamy/wiki) 및 OWASP AntiSamy 프로젝트 페이지(https://owasp.org/www-project-antisamy/)에서 확인할 수 있습니다.

    AntiSamy에 기여하기

    이슈를 찾았나요?

    버그를 발견했다면 AntiSamy 저장소에 이슈를 생성하세요: https://github.com/nahsra/antisamy/issues

    취약점을 찾았나요?

    AntiSamy에서 취약점을 발견한 경우, 먼저 이슈 목록(위 참조)을 검색하여 이미 보고되었는지 확인하십시오. 보고되지 않은 경우 Dave Wichers(dave.wichers at owasp.org)에게 직접 연락해 주십시오. 패치가 구현되고 배포되는 동안 사용자를 안전하게 보호하기 위해 GitHub 이슈를 통해 취약점을 보고하지 말아 주십시오. 취약점 발견에 대한 인정을 받고 싶다면 이 절차를 따르십시오.

    자세한 내용은 파일에서 확인할 수 있습니다: SECURITY.md.

    빌드 방법

    소스에서 빌드하고 테스트하는 것은 매우 쉽습니다:

    root@kitploit:~
    $ git clone https://github.com/nahsra/antisamy
    $ cd antisamy
    $ mvn package
    

    라이선스

    BSD-3-Clause 라이선스에 따라 배포됩니다. 자세한 내용은 LICENSE에서 확인하세요.

    도구 다운로드