2017-05-16 8 views
1

를 사용하여 자바 스크립트 파일의 URL을 변경 마십시오. 그래서 나는 스텁 버전의 서비스를 지적 할 수있다.어떻게 내가 내 자동화 테스트에서 자바 스크립트 파일 내에서 URL을 수정하려고 자바 스크립트 자동화 테스트

<script type="text/javascript" src="main.js"></script>

main.js

var DataService = (function() { 
    function DataService(http) { 
     this.http = http; 
    } 
    DataService.prototype.getStudentDetails = function (id) { 
     var parcel = this.http 
      .get('http://127.0.0.1/endpoint/' + id) 
      .map(function (res) { 
      return __WEBPACK_IMPORTED_MODULE_2__student_model__["a"].createStudent(res.json()); 
     }); 
     return student; 
    }; 
    return DataService; 
}()); 

내가해야 할 부분 : 내가 테스트를 위해 사용하고 프레임 워크는 세레-JS (사용 각도기) 내 HTML의 DOM에서

내가 가지고있는이다 변경은 127.0.0.1/endpoint

$.document.write 또는 $().append을 사용하여 HTML DOM을 차가운 것으로 변경하지만 알 수는 없습니다. 어떻게 DOM 요소를 변경/overwirte.

+0

JS 변수 또는 '입력 된 숨김'필드를 사용할 수 있습니다. – alok

+1

main.js 파일은 기존 프로덕션 시스템입니다. 다른 사용자의 취약점을 열 수있는 곳에서는 소스 코드를 변경하지 않을 것입니다. 나는 오히려 '온 더 플라이 (on the fly)'로 바꾸려고 노력할 것입니다. –

+0

아! 그것은 당신이오고있는 곳입니다! 나는 완전히 오해해서 미안합니다. – alok

답변

0

이 매우 간단하지만, 그것을하는 많은 방법이있다!

  1. 은 테스트를 실행하기 전에 설정 단계의 일환으로, 당신은 단지 sed 또는 awk 스크립트를 사용하여 main.js 파일을 사전 처리 수와 다른 뭔가로 127... 모든 문자열을 대체합니다.
  2. 모든 URL 엔드 포인트를 포함하는 구성 변수에서 읽을 수있는 생산 시스템의 코드를 변경
  3. . 그런 다음 테스트 스크립트에서 해당 객체를 변경할 수 있습니다.
  4. 테스트 스크립트를 사용하여 함수를 다른 것으로 바꿉니다. # 3의

예 :

이 @alok이 코멘트에 제안하지만, 댓글이 prototype 누락되었고,이 방법도 호출되지 말았어야하므로 코드의 모양은 무엇인가 (가 폐쇄에 숨겨진되지 않는 한) 당신이 그것을 완벽하게 제어 할 수 있습니다로 물론
const newFnString = DataService.prototype.getStudentDetails.toString() 
         .replace("127.0.0.1", "something.com"); 
DataService.prototype.getStudentDetails = new Function(newFnString); 

, 당신은 단지, 특정 기능 DataService.prototype.getStudentDetails를 대체 할 수 있었다.

P. 자바 스크립트를 변조하는 것을 어렵게함으로써 시스템을 보호하려는 것은 모호함을 통한 보안에 불과합니다. 사실이 아닙니다. 공격자는 네트워크 요청을 읽은 다음 curl 또는 Postman에서 재생할 수 있습니다.

+0

환호. 다음 세 가지 접근법 중 어느 것을 사용 했습니까? –

+0

@AndrewEvans 우수함 일 – oligofren