B-Con은 컴퓨터에 앉아있는 사람이 아니므로 스크립트에 eval()
을 사용하여 악의적 인 코드를 사용자의 현재 세션을 악용하기위한 수단으로 사용할 수 있습니다. (예 : 악의적 인 링크를 따르는 사용자).
eval()
의 위험성은 unsanitised 값으로 실행될 때 발생하며 DOM Based XSS 취약점이 발생할 수 있습니다.
(오히려 인위적인, 그러나 나는 희망을 문제를 보여줍니다) HTML에서 다음 코드를 고려 쿼리 문자열이 ?foo
당신이 단순히 알리는 경고 대화 상자를 얻을 다음과 같은 경우에 지금
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
을 : Your query string was ?foo
하지만 이 코드는 사용자가 자신의 사이트에서 http://www.example.com/page.htm?hello%22);alert(document.cookie+%22
과 같은 URL로 사용자를 리디렉션하는 것을 허용합니다. 여기서 www.example.com은 귀하의 웹 사이트입니다.
이
은
alert("Your query string was hello");
alert(document.cookie+"");
(명확성을 위해 나를 추가 한 새로운 라인)에 eval()
에 의해 실행되는 코드를 수정합니다. 이제는 현재 코드 값을 표시하는 것보다 더 악의적 인 작업을 수행 할 수 있습니다. 필요한 코드가 공격자의 링크에 의해 인코딩 된 형식으로 쿼리 문자열에 전달되기 때문입니다. 예를 들어, 쿠키가 공격자의 도메인에 리소스 요청으로 전송되어 인증 세션이 도용 될 수 있습니다.
여기에 표시된 것과 같이 쿼리 문자열뿐만 아니라 eval()
에서 직접 unsanitised되고 실행되는 사용자/외부 입력의 모든 값에 적용됩니다.
그건 "일반적인 합의"가 아닙니다. 경험 많은 개발자는 FUD가'eval'에 대해 짜증을냅니다. * "eval is evil"*은 오늘날 경험이 많은 코더가 말한 적이 없을 것입니다. 바보라면 위험 할 수 있습니다. 하지만 대개 느리고 못생긴 코드를 개발하기가 어렵습니다. –
이제이 질문이 좋은 대답을 얻는 방법을 모르겠습니다 ... –