2013-08-30 2 views
0

데이터 자바 스크립트 파일이 있습니다. 일부 맞춤 코드를 통해 웹 사이트에 동적으로 추가되고 있습니다. 이 파일은 파일에 악성 코드를 추가 할 가능성이있는 타사 공급 업체의 것입니다.Javascript - 파일의 악성 코드 위생 (문자열)

이 파일을 웹 사이트에 추가하기 전에이를 분석하고 리디렉션 또는 경고는 본질적으로 프로젝트/웹 사이트에 파일이 포함될 때 실행됩니다.

alert ('i am malicious'); 
var IAmGoodData = 
[ 
{ Name :'test', Type:'Test2 }, 
{ Name :'test1', Type:'Test21' }, 
{ Name :'test2', Type:'Test22' } 
] 

가 나는 XMLHttpRequest를 호출을 통해 객체에이 파일을로드하고이 호출이 돌아, 나는 (변수를 사용할 수있을 때 내 파일 인 :

예를 들어, 내 JS 파일은 다음과 같을 수 있습니다 텍스트)를 검색하고 단어를 검색하십시오.

var client = new XMLHttpRequest(); 
client.open('GET', 'folder/fileName.js'); 

client.onreadystatechange = function() 
{ 
     ScanText(client.responseText); 
} 
client.send(); 

function ScanText(text) 
{ 
     alert(text); 
     var index = text.search('alert'); //Here i can search for keywords 
} 

마지막 줄은 단어 alert이 파일의 색인 0에서 발견됨에 따라 0의 색인을 리턴합니다.

질문 :

  1. 파일의 키워드를 검색 할 수있는보다 효율적인 방법이 있나요?
  2. 악성 코드가 실행되는 것을 막기 위해 어떤 특정 키워드를 검색해야합니까? 즉, 리다이렉트, 팝업, 소리 등 .....
+0

귀하의 접근 방식은 쓸모가 없습니다. 가능한 모든 악의적 인 동작을 감지 할 수는 없습니다. 어떻게 일을하는지 재검토해야합니다. 아마도이 파일의 내용과 사용 방법에 대해 더 많은 정보를 제공 할 수 있습니까? –

+0

자바 스크립트는 매우 동적이어서 충분히 어렵습니다. Google Caja를 사용하십시오. – SLaks

+0

@DarkFalcon지도 노드와 해당 노드에 대한 정보 (위치, 이름 등)가있는 fileld 파일입니다. 그들을지도에 표시합니다. 이 노드는 제 3자를 통해 당사에 전달됩니다. –

답변

3

var IAmGoodData =이 포함되는 대신, JSON을 제공하면됩니다 (기본적으로 파일의 나머지 부분이 무엇인지 또는 그렇다고 볼 수 있습니다). 그런 다음 JSON으로 구문 분석하고 JSON.parse()을 사용합니다. 실패 할 경우 JSON 형식을 잘 따르지 않았거나 외부 코드를 갖고 있지 않으며 두 경우 모두 응답을 무시합니다.

예를 들어, 같은 외부 파일에서 데이터를 기대할 : 필요

[ 
{ Name :'test', Type:'Test2' }, 
{ Name :'test1', Type:'Test21' }, 
{ Name :'test2', Type:'Test22' } 
] 

가 제대로 JSON (대신 작은 따옴표 큰 따옴표와 키 큰 따옴표)로 직렬화 할 수 있습니다. 당신의 코드에서 사용하십시오 :

var json; 
try { 
    json = JSON.parse(client.responseText); 
catch (ex) { 
    // Invalid JSON 
} 

if (json) { 
    // Do something with the response 
} 

는 그런 다음 json 이상 루프는 각각의 NameType 속성에 액세스 할 수 있습니다.

랜덤 참고 : client.onreadystatechange 콜백에서

, 당신은 client.readyState === 4 && client.status === 200을 확인 요청이 성공하고 수행 알고 있는지 확인하십시오.

+0

Hey Ian, 클라이언트 객체의 readyState 및 상태 설정이 명시 적으로 수행하는 작업은 무엇입니까? 주와 지위의 목록과 그 의미가 어딘가에 있습니까? –

+0

또한 JSON.parse를 작동시킬 수없는 것처럼 보입니다. 항상 catch 절로 넘어갑니다. 내가 그것을 사용하기 위해 포함해야 할 것이 있습니까? –

+0

죄송합니다. 신경 쓰지 마세요, 잘못된 json을 들고 실패했습니다. 문제는 단지 json 데이터가있을 때에도 여전히 작동하지 않습니다. 그것은 이름 노드와 폭탄을 본다. –

-3

당신은해서는 안됩니다. 사용자는 원하는 내용을 입력 할 수 있어야하며 표시하는 것은 사용자의 작업입니다.

이 모든 것은 물론, 그것은 넣어되는 위치에 따라 달라집니다

  • 데이터베이스 : mysql_real_escape_string 또는 당신이 사용하는 어떤 엔진에 대한 상응.
  • HTML : PHP에서 json_encode, 자바 스크립트 JSON.stringify : PHP, createTextNode 또는 .replace(/</g,"&lt;")에서 htmlspecialchars 자바 스크립트
  • 자바 스크립트입니다. 하루의 끝에서

, 그냥 don't be Yahoo

0

이 할 매우 어렵다. 본질적으로 악의적 인의 키워드 또는 기능은 악의적 인 형태로 존재합니다. 이 있습니다. "악의적 인"활동에 대해 잘못된 반응을 보이고 실제 목적을 가진 합법적 인 코드가 실행되는 것을 방지 할 수 있습니다. 동시에 약간의 상상력을 가진 사람이라면 구현할 수있는 "예방적인"방법을 우회 할 수 있습니다.

나는 다른 접근법을 제안합니다. 이것은 사람이 해결할 수있는 사소한 문제 (예 : CAPTCHA) 중 하나입니다. 그러나 기계의 경우에는 그렇게 할 수 없습니다. 코드를 해석하고 받아들이는 중재자 또는 인간 평가자가있을 수 있습니다.

+0

안녕하세요. 정보를 제공해 주셔서 감사합니다. 이 파일은지도의 데이터 노드로만 구성됩니다. 우리가 진정한 목적으로 합법적 인 코드를 갖게되는 경우는 결코 없을 것입니다. 그래서 나는 safley가 코드를 검색 할 수 있고, 발견되면, 항상 그 악성을 가정한다. –

+1

@ jordan.peoples 아, 나는 그것이 일반적으로 코드라고 생각했다. 그런 다음 "블랙 리스팅"대신 모든 가능한 악성 코드, "화이트 리스팅"을 제안합니다. 예를 들어 RegEx를 사용하여 데이터 노드를 일치시키고 _ 일치하면 일치합니다. – federicot

0

임의의 Javascript가 아닌 유효한 JSON을 제공해야합니다.
코드 실행 위험없이 데이터를 읽으려면 JSON.parse()으로 전화하십시오.

요약하면 데이터는 코드이 아니며 코드를 포함 할 수 없어야합니다.

+0

우리 모두는 이것을 알고 있지만, 다른 그룹이 악의적으로 변하면 (매일 해고되는 것과 같이) 해고되고 마지막 업로드시 데이터가 파일을 변경하여 코드를 포함하게됩니다. 단지 텍스트 일 ​​뿐이므로 .... 뭐라구? –

+0

@ jordan.peoples : 그렇기 때문에 항상 텍스트로 취급해야합니다. 따라서 코드가 포함될 수 없습니다. – SLaks

+0

무엇이든 코드를 포함 할 수 있으며 모든 것이 자바 스크립트의 텍스트입니다. –

관련 문제