리버티게임:스크립트 지침
스크립트는 사용자의 브라우저에서 작동하는 자바스크립트 프로그램입니다. 스크립트를 적절히 활용하면 수준 높은 게임을 만들 수 있고, 이러한 게임을 쉽게 만들고 관리할 수 있도록 돕는 도구를 만들 수도 있습니다. 하지만 스크립트를 실행한 사용자의 계정을 이용해 자동으로 광범위한 문서 훼손을 일으킬 수도 있는 위험한 도구이기도 합니다. 따라서 다른 사용자가 만든 스크립트를 등록하거나 실행할 때는 큰 주의가 필요합니다.
이 지침은 플러그인의 등장 이후 암묵적으로 확립된 보안 관행을 명문화하여 관리자나 사용자 중 아무도 승인하지 않은 악성 스크립트가 우회적으로 실행되는 보안 취약점을 차단하고, 저품질의 스크립트로 사이트의 보안이나 사용자 경험이 저하되는 것을 예방하며, 스크립트에 직접적인 영향을 받는 사용자가 스스로 스크립트를 통제할 수 있도록 충분한 정보를 제공받고 선택권을 보장받을 것을 목적으로 합니다.
종류[원본 편집]
리버티게임에서 사용되는 스크립트의 종류는 다음과 같습니다.
- 관리자가 승인하는 스크립트
 - 사용자가 승인하는 스크립트
 - 사용자가 직접 작성한 스크립트
- 사용자 스크립트: 
사용자:이름공간의.js확장자를 가진 문서 
 - 사용자 스크립트: 
 - 그 외 다른 스크립트에서 호출되는 스크립트
 
승인[원본 편집]
리버티게임에서는 오직 관리자의 사전 승인을 받거나, 스크립트를 실행하는 사용자의 동의를 받은 스크립트만 실행될 수 있습니다. 사용자가 스스로 작성하여 직접 실행하는 사용자 스크립트는 이미 사용자의 동의를 받은 것으로 간주합니다.
다음에 동의 없이 실행할 수 있다는 점을 명시하여 함께 동의를 받으면 코드가 바뀌지 않았을 때 동의 없이 다시 실행할 수 있습니다. 다시 실행될 때 묻지 않는 모든 형태의 동의는 동의한 사용자가 언제든지 철회할 수 있어야 합니다.
사용자가 스크립트를 동의할 때 소스 코드를 확인할 수 있어야 합니다. 이때 표시되는 소스 코드는 난독화되어서는 안되며, 불가피한 경우에는 난독화를 최소화하고 원본 소스코드를 링크하는 방식으로 대체할 수 있습니다. 단, DOM 수정이 가능한 영역이 제한되고 개별적인 동의가 필요한 기능을 사용자의 동의를 받기 전에 사용할 수 없는 샌드박스 환경에서 작동되는 스크립트는 소스 코드를 보여주지 않아도 됩니다.
스크립트를 실행하기 전 사용자의 동의를 받을 때 다음 기능을 사용한다면 이를 명시해야 합니다.
- 문서 편집
 - DOM 요소 수정
 - 미디어위키 사용자 설정 변경
 - 외부 사이트와의 통신
 
다음 기능을 사용할 때 기능별로 개별적인 동의가 필요하며 해당 기능이 사용됐음을 사용자가 인지할 수 있어야 합니다.
- 문서 편집
 - 미디어위키 사용자 설정 변경
 - 외부 페이지로의 이동
 - 외부 사이트와의 통신
 
자동 문서 편집[원본 편집]
특정 템플릿을 이용하여 동일한 문서를 편집하는 경우, 다음에 동의 없이 편집할 수 있다는 점을 명시하여 한번 동의를 받으면 그 이후에는 동의 없이 동일한 템플릿으로 문서를 편집할 수 있습니다.
지금 당장 문서를 편집하지 않더라도 나중에 동일한 템플릿을 이용해서 편집할 가능성이 있는 문서 목록이나 문서 제목의 패턴을 제시하여 일괄적으로 동의를 받을 수 있습니다.
자동으로 문서를 편집할 때 마다 사용자에게 편집한 문서와 그 수정사항(차이)을 즉시 알려줘야 합니다. 차이를 확인할 수 있는 링크나 버튼과 문서명을 표시하는 것으로 이를 대체할 수 있습니다.
미디어위키 사용자 설정 변경[원본 편집]
미디어위키 API의 options 기능을 통해 사용자 설정을 변경하기 전에 어떻게 설정이 바뀌는지 사용자에게 알려주고 동의를 얻어야 합니다. 단, userjs- 접두어를 사용해 스크립트 자기 자신에 대한 설정이나 데이터를 변경할 때는 필요하지 않습니다. 하지만 다른 스크립트의 설정을 변경하는 경우는 마찬가지로 동의가 필요합니다.
외부 사이트와의 통신[원본 편집]
외부 사이트와 데이터를 주고받으려면 도메인별로 사전에 동의를 받아야 합니다.[1] 다음에 동의 없이 통신할 수 있다는 점을 명시하여 도메인에 대해 한번 동의를 받으면 그 이후에는 동일한 도메인과 동의 없이 통신이 가능합니다.
외부 페이지로의 이동[원본 편집]
사용자 개입 없이 자동으로 외부 사이트로 리다이렉트 될 수 없습니다. 목적지 URL을 사용자가 확인할 수 있게 리다이렉트 여부를 사용자에게 물어야 합니다.
링크 및 버튼을 통해 이동하는 경우, 링크에 외부 링크라는 표시가 있고 커서를 대는 등 이동 전에 목적지 URL을 확인할 수 있다면 이러한 형태의 링크 클릭을 사용자의 동의로 간주합니다. 인터위키에 등록된 사이트는 외부 링크 표시를 생략할 수 있습니다.
제한[원본 편집]
다음과 같은 문제가 있는 스크립트는 관리자가 승인하지 않으며, 누구에게도 실행되지 못하도록 삭제와 같은 기술적인 조치를 할 수 있습니다. 단, 그 이유는 명시해야 합니다.
- 승인되지 않은 스크립트를 추가로 실행할 수 있는 스크립트
 - 취약점이 있거나 악용 가능성이 있는 스크립트
 - 다른 기능과 충돌하는 스크립트
- 사용하는 HTML ID/클래스가 다른 기능과 겹쳐 작동을 방해하는 스크립트
 - 사용하는 로컬 저장소의 키가 다른 기능과 겹쳐 작동을 방해하는 스크립트
 - 사용하는 미디어위키 사용자 옵션 키가 다른 기능과 겹쳐 작동을 방해하는 스크립트
 - 사용하는 자바스크립트 변수가 다른 기능과 겹쳐 작동을 방해하는 스크립트
 
 - 사이트의 성능을 현저하게 저하시키거나, 저하시킬 우려가 있는 방식으로 구현된 스크립트
- 무한 루프에 갇힐 가능성이 있는 스크립트
 - 네트워크를 통해 동기적으로 리소스를 요청하는 스크립트
 - 서버에 대량의 요청을 보내는 스크립트
 
 - 민감한 정보를 외부로 유출할 수 있는 스크립트
 - 문서를 훼손하는 스크립트
 - 사용자의 의도와 맞지 않게 다른 기능의 사용을 방해하는 스크립트
 
사용자가 이미 동의한 경우라도, 문제가 되는 스크립트는 관리자가 사후에 실행을 차단할 수 있어야 합니다.
선택적 제한[원본 편집]
다음은 부득이한 경우에 허용될 수 있으나, 스크립트의 동작이 사용자의 의도에 부합하지 않거나 문제가 될 경우 관리자의 재량에 따라 승인을 거부하거나 실행을 차단할 수 있습니다.
- 다른 스크립트에서 사용하는 함수나 이벤트, 설정은 가급적 변경하지 않아야 합니다.
 - 사이트 외부와 데이터를 주고받는 것을 피해야 합니다.[2]
 - 주요 브라우저(크롬, 파이어폭스, 사파리)의 정식 출시된 최신버전에서 정상적으로 작동되어야 합니다.[3]