LAMS는 호주 Macquarie University, LAMS International Ltd. 및 LAMS Foundation이 공동 개발한 차세대 JAVA 기반 학습 소프트웨어입니다. 인증되지 않은 반사 XSS(교차 사이트 스크립팅)가 3.1 이전 LAMS에 존재하여 ForgetPasswordChange.jsp에서 원격 공격자가 허용됩니까? 키 = 비밀번호 변경 중에 지정되지 않은 GET 매개변수를 조작하여 임의의 JavaScript를 도입합니다. |
|
3. 샘플 코드
샘플은 Samate Juliet Test Suite for Java v1.3(https://samate.nist.gov/SARD/testsuite.php)에서 가져온 것입니다. 소스 파일 이름: CWE80_XSS__CWE182_Servlet_URLConnection_03.java.
3.1 결함 코드
위 예제 코드 연산은 사용자의 나이를 구하고, 40행에서 연결 객체를 생성하고, 44행에서 입력 스트림을 생성하여 urlConnection
객체 응답 콘텐츠, 52행의 버퍼 스트림에서 데이터 한 줄을 읽고, 52행에서 얻은 데이터에서 <script></script>
태그를 지정하고 <script></script>
태그가 필터링되더라도 처리된 데이터를 페이지에 출력합니다. , 그러나 여전히 다른 html
태그를 사용할 수 있습니다. 여기서 악성 url
하지만 웹사이트가 보호되지 않는 경우 페이지는 document.cookie
의 내용을 읽어서 페이지에 입력합니다. 이렇게 하면 반영된 XSS가 생성됩니다. urlConnection
对象响应的内容,在第52行从缓冲流中读取一行数据,在第100行中,将获得的数据去除所有的<script></script>
标签并向页面输出处理后的数据,即使过滤了<script></script>
标签,但仍然可以使用其他html
标签,在这里构造了恶意的url
,但网站未做防护时,页面会读取到document.cookie
的内容并输入到页面。这样就造成了反射型 XSS。
使用360代码卫士对上述示例代码进行检测,可以检出“反射型XSS”缺陷,显示等级为高。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第100行报出缺陷,如图1所示:
图1:反射型 XSS 检测示例
3.2 修复代码
在上述修复代码中,由于页面输出的内容为用户的年龄,在第96行,对响应的内容转换为数字,这样就过滤了其它 html 的字符,即使存在字符,代码会报出异常,并不会造成反射型 XSS 的发生。
使用360代码卫士对修复后的代码进行检测,可以看到已不存在“反射型XSS”缺陷。如图2:
图2:修复后检测结果
4 、如何避免反射型 XSS
要避免反射型 XSS,需要注意以下几点:
(1) 对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如 、'、"等)以及<script></script>
、javascript
等进行过滤。
(2) 根据数据将要置于 HTML 上下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、CSS、URL),对所有不可信数据进行恰当的输出编码。
(3) 设置HttpOnly
属性,避免攻击者利用XSS
漏洞进行Cookie
劫持攻击。在 JavaEE 中,给Cookie
添加HttpOnly
360 코드 가드를 사용하여 위의 샘플 코드를 감지하면 "반사된 XSS" 결함을 감지할 수 있으며 표시 수준이 높습니다. 추적 경로를 통해 데이터 오염의 원인과 데이터 흐름 방향을 분석할 수 있으며 그림 1과 같이 코드의 100번째 라인에 결함이 보고됩니다. 그림 1: 반사된 XSS 감지 예
🎜🎜3.2 복구 코드🎜🎜🎜🎜🎜위 복구 코드에서는 페이지에서 출력되는 내용이 사용자 연령의 96페이지 줄에서 응답 내용을 숫자로 변환하여 다른 HTML 문자를 필터링합니다. 문자가 존재하더라도 코드는 예외를 보고하고 XSS를 반영하지 않습니다. 🎜🎜360 코드가드를 이용해 복구된 코드를 검출해 보면 '반영된 XSS' 불량은 없는 것을 확인할 수 있습니다. 그림 2와 같이: 🎜🎜
🎜🎜그림 2: 수리 후 감지 결과🎜🎜🎜4. 반사 XSS를 방지하는 방법🎜🎜🎜반사를 방지하려면 숫자를 사용할 수 있으며 특수 문자(예: , ', " 등) .) 및 <script></script>
, javascript
등을 사용하여 필터링합니다. 🎜🎜(2) HTML 컨텍스트(HTML 태그, HTML 속성, JavaScript 스크립트, CSS, URL)에서 데이터가 배치될 다양한 위치에 따라 필터 신뢰할 수 없는 모든 데이터가 올바르게 출력됩니다. 🎜🎜(3) 설정합니다. 공격자가 XSS
취약점을 사용하는 것을 방지하기 위한 HttpOnly
속성은 쿠키 하이재킹 공격 JavaEE에서는 쿠키
를 추가하는 코드를 제공하세요. class="prettyprint code-in-text Prettyprinted">HttpOnly는 다음과 같습니다: 🎜🎜🎜🎜