2010-04-23 4 views
6

저는 테스트 팀의 일원이며 Firefox 브라우저에서 JavaScript를 사용하여 "잘못 행동"하는 과제를 담당하고 있습니다. 나는 브라우저를 다운시키기 위해 these methods을 시도했지만, 그 누구도 스크립트를 종료하라는 팝업을 발생시키는 것보다 더 나쁜 것을하지는 않습니다.JavaScript를 사용하여 Firefox를 크래시 할 수 있습니다.

다른 아이디어?

+18

소리가 좋아요 : 제발 날 0 데이즈에 대한 segfaults 찾기! –

답변

9

는 "포크 폭탄"

<html> 
<body> 
<a href="#" onclick="die()">click me!</a> 
<script> 
function die() { 
    setTimeout(function() {die(); die()}, 0) 
} 
</script> 
</body> 
</html> 

에 다소 유사은 아래 FF 3.6에 의해 stoppable되지 않습니다. 오래 갈수록 더 악의적 인 행동을하게됩니다. 결국 프로세스에서 사용할 수있는 모든 메모리가 소모됩니다. CPU의로드도 증가해야합니다. 일부 운영 체제는 다른 운영 체제보다 잘못된 동작 FF를 처리 할 수 ​​있습니다. 매주기마다 적절한로드를 DOM에 적용하면이 속성을 더 퇴화시킬 수 있습니다.

편집 : "이 지식은 전 세계의 이익을 위해서만 사용하십시오." :-)

+1

저는 파이어 폭스 13을 실행 중이지만 여전히 면역성이 없습니다. 몇 분 후, 파이어 폭스는 나에게 "We 're Sorry"상자를 제공한다. – bwDraco

+2

어, 어떤 취약점이 있습니다.32 비트 버전의 Firefox에서는 몇 분 후에 Firefox를 다운시킬 수있는 쉬운 DoS 공격입니다. 64 비트 파이어 폭스 (예 : x86-64 Linux)에서는 브라우저가 실질적으로 무한대의 메모리를 할당 할 수 있으며 OOM 킬러가이를 감지 할 때까지 스와핑으로 인해 머신을 잠글 수 있습니다. 비슷한 기능을 갖고있어 컴퓨터를 완전히 고장 나게합니다. 이것은 정말로 패치가 필요합니다. – bwDraco

+0

@DragonLord 정말 수치 스럽습니다. 나는 핸들러의 수에 대한 내부의 정당한 한계를 기대할 것입니다 .. 어떻게 다른 브라우저가 공정한 지 궁금합니다. 그러나, 내가 * 그 * 사이트를 방문한 적이 있다면, 나는 결코 돌아 오지 않을 것이다.) –

6

스크립트 실행 시간 감시는 멋지지만 모달 루프 문제는 해결되지 않습니다. alert, confirm 또는 prompt 상자로가는 것은이 만드는 타이머를 중지 :

<script>while(true) alert('alert bomb');</script> 

에서 탈출하기 어려운,이 : 효과적으로 불가능

<body onbeforeunload="while(true) alert('alert bomb');"> 

합니다.

탈출하기 어려운 모달 루프를 사용하는 것은 공격적인 스파이웨어 설치 프로그램 페이지의 선호하는 방법이었습니다. (예를 클릭하면 지금 VomitBar를 설치하거나 끝없는 경고 상자를 직면하게됩니다 ...)

+3

Chrome> Firefox on this one :); http://tinypic.com/r/54smer/5 – Matt

+1

가장 성가신 것 중 하나 ... 이제까지! –

+2

크롬은 첫 번째 상자 다음에 스크립트를 종료 할 수있는 옵션을 제공합니다. –

2

DOM을 약 10,000 개 이상 많이 삽입하여 Firefox를 반복적으로 충돌시킬 수있었습니다.

기본적으로 사용자는 버튼을 클릭하여 jQuery AJAX 호출을 시작합니다. 이 호출은 jQuery로 특정 div에 추가되는 전체 HTML 파일을 리턴합니다.

<script> 
    $("div.content").empty(); 
    $("div.content").html(data); 
</script> 

그런 다음 데이터가 추가 된 후에는 이벤트 트리에서 기본적으로 모든 요소를 ​​데이터의 전체 오물을 분석하고 추가 OnClick과 onHover하려고 시도합니다.

안심하십시오,이 기능을 실행할 때마다 브라우저가 다운되었습니다. 그것은 보통 "스크립트가 천천히 실행되고 취소 하시겠습니까?"라고 말하지만 결코 취소 할 수는 없으며 항상 CTRL + ALT + DEL을 눌러야합니다.

나는 단지 10,000 요소 삽입을 할 계획이 없었습니다. 그것은 내 부분에서 오류였습니다. 나는 JOIN으로 데이터베이스에 질의를하고 있었고 SELECT DISTINCT를 할 의도 였고 대신 SELECT를 사용하여 100 개의 요소를 반환하는 대신 조인 때문에 10,000을 반환했습니다. 오케이. (사용자가 곧 충분히 위반 탭을 닫습니다 발생하지 않는 한)

관련 문제