삶 가운데 남긴 기록 AACII.TISTORY.COM
JAVA (javascript)보안 Eval Injection 본문
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
728x90
'DEV&OPS > Java' 카테고리의 다른 글
JAVA 보안 Unsafe Reflection (0) | 2022.08.19 |
---|---|
JAVA 보안 Process Control (0) | 2022.08.18 |
JAVA 보안 Improper Neutralization of Script-Related HTML Tags in a Web Page (0) | 2022.08.17 |
JAVA 보안 External Control of System or Configuration Setting (0) | 2022.08.17 |
JAVA 보안 SQL Injection: mybatis Data Map (0) | 2022.08.17 |