2013-09-02 2 views
0

현재 코드에서 evals를 사용하면서이 질문을 보았습니다. 브라우저에서 자바 스크립트 코드가있을 때Javascript에서 evals는 실제로 코드를 사용할 수있을 때 보안 위험이 있습니다.

Why is using the JavaScript eval function a bad idea?

, 당신은 HTML의 일부로서 또는 별도의 파일로 자바 스크립트를 다운로드합니다. 누구든지보고 수정할 수있는 소스 코드가 있습니다. eval()을 통한 주입 공격이 소스 코드를 해킹하고 공격자가 원하는 것을 수행하는 것보다 더 나쁠 수는 없습니다.

누군가 내가 누락 된 내용을 설명 할 수 있습니까? 또는 eval이 위험한 일부 시나리오에서는 소스 코드를 변경하여 (쉽게) 얻을 수 없습니다.

+2

답변 : "eval is evil"은 대부분 FUD입니다. 특히 바보 같은 일을하지 않으면 (원산지가 확실하지 않은 코드를 평가하는 것과 같이) 느리고 불편하다는 점을 제외하고는 아무런 문제가 없습니다. –

답변

2

자바 스크립트 주입 공격의 경우 신뢰할 수없는 코드를 제공하는 브라우저 사용자에 대해 걱정하지 않아도됩니다. 당신은 다른 장소의 코드에 대해 걱정하고 있습니다.예를 들어, 타사 사이트에서 데이터를 다운로드하고 eval 데이터를 다운로드하는 경우이 코드는 사용자 페이지의 컨텍스트에서 실행되며 사용자의 데이터로 불량 일을 수행 할 수 있습니다. 그래서 당신은 제 3자가 당신에게 사악한 JS를 보내지 않는다고 믿고 있습니다.

물론 우리는 종종이를 정기적으로 수행합니다. 우리 중 많은 사람들이 jQuery 및 기타 라이브러리를 얻기 위해 Google 또는 Microsoft CDN에 연결합니다. 이러한 사이트는 잘 알려진 사이트이므로 성능 이점을 얻으려는 사이트를 신뢰할 수 있습니다. 그러나 사이트의 신뢰도가 떨어지면 더 조심해야하며 맹목적으로 보내는 것이 무엇이든 실행하지 않아야합니다.

사이트 간 AJAX 규칙은이 타사 코드가 수행 할 수있는 손상을 어느 정도 제한합니다. 이러한 브라우저 변경은 XSS 공격이 수행되고 사용자 개인 데이터를 공격자에게 전송했기 때문에 정확하게 적용됩니다. 그러나 eval은 여전히 ​​일부 유형의 맬웨어를 허용하므로주의해야합니다.

+0

내 코드의 평가판이 안전하다고 가정 할 수 있습니까? –

+0

@wobbily_col - 안전하다고하더라도 디버깅 가능성, 성능, 메모리 사용 등 다른 문제도 고려해야합니다. 실제로 Eval은 컴파일러가 실행될 때마다 컴파일러를 호출합니다. – kamituel

+0

네, 저도 고려해 봤습니다. 그것은 복잡한 것을 평가하지 않습니다. 방금 보안 문제를 생각하게되었습니다. –

0

평가할 문자열이 신뢰할 수 있고 안전하다고 확신하는 상황에서도 항상 eval으로 갈만한 가치가있는 것은 아닙니다.

예를 들어 웹 페이지를 모질라 파이어 폭스 OS에서 응용 프로그램으로 사용할 수있게하려면 eval이 금지되어 있기 때문에 깨뜨릴 수 있습니다. 자세한 내용은 this page을 참조하십시오.

비슷하게 eval의 간단한 사용은 Google 크롬 확장에서 this doc과 같이 작동하지 않습니다.

평가하려는 문자열의 안전성에 100 % 긍정적이지 않은 경우 eval을 완전히 피해야합니다.

+0

나는 그것을 사용하지 않는 또 다른 이유가 있음을 알 수 있지만 쉽게 편집 할 수있는 소스 파일을 사용할 수있을 때 보안 관련 사항을보기 위해 고심하고 있습니다. –

0

의 당신이 연결된 문제의 감자 예에서 시작하자 : 당신은 "몸"또는 "형태를 [선택하도록 요청하는 경우

eval('document.' + potato + '.style.color = "red"'); 

이의 당신이 입력 필드가 있다고 가정하자 귀하의 사이트에, potato라고 0] "로 설정하고 위 입력 코드와 코드를 사용하여 사용자 (예 : DB 사용) 사용자에게 전달하는 페이지의 본문 또는 첫 번째 양식의 색상을 변경합니다.

지금 potato 안에이를 넣어 적당히 악한 사용자를 가정 해

"title;alert('test');({style:{color:1}})" 

그리고 무슨 일하는 경고입니다. 그러나 이것은 페이지의 기밀 콘텐츠를 제공하는 서버에 대한 아약스 호출처럼 악화 될 수 있습니다.

알다시피, SQL 인젝션과 거의 같은 종류의 문제입니다.

물론 사용자 지정 문자열을 사용하고 민감한 콘텐츠가있는 페이지의 다른 컴퓨터에있는 문자열에 넣는 것은 매우 어리 석습니다. 그래서 나는 "eval is evil"이 대부분 성가신 FUD라고 주장한다.

또 다른 중요한 점은 eval이 느리고 대부분의 경우 쓸데없는 것이 더 깔끔하고 유지 보수가 잘되는 솔루션 일 수 있다는 것입니다.

평가는 악의가 아니지만 일반적으로 나쁜 습관입니다.

+0

나는 여전히 자바 스크립트 소스 파일을 가져 와서 동일한 결과를 얻으려고 해킹하는 것보다 다소 안전하다고는 생각하지 않는다. –

+1

중요한 부분은 "감자"를 ** 다른 사용자 **에게 전파하는 부분입니다. 예를 들어 사용자에게 입력 코드에 제공된 코드의 평가를 통해 다른 사용자 브라우저의 요소를 적색으로 채색하는 데 사용할 요소 이름을 지정하도록 지시 할 때 발생할 수 있습니다. –

관련 문제