Recent Posts
Recent Comments
Link
06-28 05:11
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

JAVA (javascript)보안 Eval Injection 본문

DEV&OPS/Java

JAVA (javascript)보안 Eval Injection

ALEPH.GEM 2022. 8. 18. 17:21

Eval Injection 동적으로 생성되어 수행되는 명령어 주입

정의

외부 입력이 동적으로 스크립트나 명령어 생성에 사용될 경우 의도하지 않은 명령어가 외부부터 주입되어 문제를 일으킬 수 있습니다.

 

방어 방법

외부의 입력이 eval()함수의 인자로 사용될 경우 위험 문자를 제거합니다.
ESAPI for javascript 등 보안 API를 이용하여 외부에서 입력되는 값을 검증한 후 사용합니다.

 

안전하지 않은 코드의 예

<%
    String evalParam = request.getParameter("eval");
%>
<script>
    eval(<%=evalParam%>);
</script>

외부 입력 evalParam이 eval()함수의 인자로 사용되고 있습니다.

 

 

안전한 코드의 예

<%
    String evalParam = request.getparameter("eval");
    //입력값 검증
    if ( evalParam != null ) {
        evalParam = evalParam.replaceAll("<","&lt;");
        evalParam = evalParam.replaceAll(">","&gt;");
        evalParam = evalParam.replaceAll("&","&amp;");
        evalParam = evalParam.replaceAll("(","&#40;");
        evalParam = evalParam.replaceAll(")","&#41;");
        evalParam = evalParam.replaceAll("\"","&quot;");
        evalParam = evalParam.replaceAll("\'","&apos;");
    }
%>
<script>
    eval(<%=evalParam%>);
</script>

ESAPI 사용 예제

<%@page import="org.owasp.esapi.*"%>

<script>
var a = '<%=ESAPI.encoder().encodeForJavaScript(evalParam) %>';
</script>

 

 

 

참고

http://cwe.mitre.org/data/definitions/95.html

 

CWE - CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection') (4.8)

div.collapseblock { display:inline} CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')Weakness ID: 95Abstraction: VariantStructure: Simple The software receives input from an upstream component, but it does not n

cwe.mitre.org

 

 

 

 

 

 

 

 

728x90