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("<","<");
evalParam = evalParam.replaceAll(">",">");
evalParam = evalParam.replaceAll("&","&");
evalParam = evalParam.replaceAll("(","(");
evalParam = evalParam.replaceAll(")",")");
evalParam = evalParam.replaceAll("\"",""");
evalParam = evalParam.replaceAll("\'","'");
}
%>
<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