safe 자바스크립트 웹 앱을 위한 web api 오용...

30
SAFE Wapp : 자바스크립트 웹 앱을 위한 Web API 오용 검출기 배성경 1 조형헌 2 류석영 1 1 카이스트 2 삼성전자

Upload: others

Post on 01-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

SAFEWapp: 자바스크립트 웹 앱을 위한 Web API 오용 검출기

배성경1 조형헌2 류석영1

1카이스트 2삼성전자

Page 2: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

“JavaScript”

Page 3: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

“동적인 언어”

Page 4: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

Page 5: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f(42);

Page 6: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f(42);

f("문자열");

Page 7: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f(42);

f("문자열");f({  임의의:  "객체"  });

Page 8: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f(42);

f("문자열");f({  임의의:  "객체"  });

f(f);

Page 9: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f(42);

f("문자열");f({  임의의:  "객체"  });

f(f);

*  Bug  Detector  *  example.js:11:1~11:22:  [Warning]  Calling  a  function  'f'  with  the  parameter  'x'  of  varying  types  (Number,  String,  Object).

Page 10: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

Page 11: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f();

Page 12: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f();

f("인자",  "개수",  "상관없음");

Page 13: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

function  f(x)  {          return  x;  }

f();

f("인자",  "개수",  "상관없음");

*  Bug  Detector  *  example.js:10:1~10:4:  [Warning]  Too  few  arguments  to  function  'f'.  example.js:11:1~11:22:  [Warning]  Too  many  arguments  to  function  'f'.

Page 14: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

하지만 API 함수를 쓴다면 어떨까?

Page 15: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의
Page 16: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의
Page 17: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의
Page 18: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

Web IDL

Page 19: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

Web IDLWeb Interface Description Language

Page 20: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

3.9. Objects implementing interfaces 3.10. Types

3.10.1. any 3.10.2. boolean 3.10.3. byte 3.10.4. octet 3.10.5. short 3.10.6. unsigned short 3.10.7. long 3.10.8. unsigned long 3.10.9. long long 3.10.10. unsigned long long 3.10.11. float 3.10.12. unrestricted float 3.10.13. double 3.10.14. unrestricted double 3.10.15. DOMString 3.10.16. object 3.10.17. Interface types 3.10.18. Dictionary types 3.10.19. Enumeration types 3.10.20. Callback function types 3.10.21. Nullable types — T? 3.10.22. Sequences — sequence<T> 3.10.23. Arrays — T[] 3.10.24. Union types 3.10.25. Date

3.11. Extended attributes

Page 21: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

http://img-developer.samsung.com/onlinedocs/samsung_webapi_guide/html/index.html

Page 22: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

webapis.calendar.getDefaultCalendar("HELLO");

Page 23: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

webapis.calendar.getDefaultCalendar("HELLO");

!            Calendar  getDefaultCalendar(CalendarType  type);

Method Signature

Page 24: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

webapis.calendar.getDefaultCalendar("HELLO");

!            Calendar  getDefaultCalendar(CalendarType  type);

Method Signature

!            enum  CalendarType  {  "EVENT",  "TASK"  };

WebIDL Specification

Page 25: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

webapis.calendar.getDefaultCalendar("HELLO");

!            Calendar  getDefaultCalendar(CalendarType  type);

Method Signature

!            enum  CalendarType  {  "EVENT",  "TASK"  };

WebIDL Specification

*  Bug  Detector  *  example.js:1:1~1:45:  [WebAPIError]  Argument  #1  of  the  function  webapis.calendar.getDefaultCalendar  is  wrong;  the  expected  type  is  CalendarType.

Page 26: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

Web API 사용 결함 검출

• Web API에서 지원하지 않는 API 호출하는 경우

• API의 인자 수가 명세와 맞지 않는 경우

• 비동기로 동작하는 API의 error callback을 생략하는 경우

• 예외사항을 발생시킬 수 있는 API를 try-catch로 감싸지 않은 경우

Page 27: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

Web API 사용 결함 검출

• API의 인자로 명세와 다른 자료형의 값이 사용된 경우

• Callback으로 사용된 함수 내부에서 인자에 없는 property를 사용한 경우

• Dictionary 객체를 명세와 다르게 생성한 경우

Page 28: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

SAFE

Page 29: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

SAFEWapp

Page 30: SAFE 자바스크립트 웹 앱을 위한 Web API 오용 검출기rosaec.snu.ac.kr/meet/file/20140115m.pdfWeb API 사용 결함 검출 • API의 인자로 명세와 다른 자료형의

포스터 세션에서 만나요