설치 방법은 http://noexists.tistory.com/193 참고
일부 언어만 허용하고 싶은 경우가 있다. 여기서는 C 언어만 허용하는 상황을 예로 들어 보겠다.
static $OJ_LANGMASK=126; // C 언어만 허용.
이렇게 LANGMASK 설정만 해서 모든 것이 완벽하면 좋겠지만 그렇지 않다.
submitpage.php
C 언어만 받도록 하기 위해 $langmask=126을 추가한다. 위치가 중요한데, "$lang=(~((int)$langmask))&127;"의 바로 위에 넣어야 한다. 왜냐하면 $langmask=$_GET['langmask'];을 통해 덮어 씌우는 일을 막아야 하기 때문이다. (GET이라는 것은 a.php?langmask=1처럼 url로 변수를 전달하는 것이다.) 사실, contest에서는 LANGMASK 설정이 따로 있어서 이런 식으로 된 것 같다. 그러나 사용자가 직접 url을 수정해서 langmask를 바꾸면 어쩌려고 그러나? 코드를 읽다보면 이런 식으로 url 공격에 취약(?)한 부분이 보인다.
이렇게 해도 아직 완벽하지 않다. 사용자에게 보여지는 페이지는 사용자가 조작이 가능하기 때문이다. (그리스몽키 등으로 option 태그를 바꿔버리는 방법 등이 있다.) 안전하게 하려면 submit.php에서 한 번 더 language가 허용되는 language인지 확인해야 한다.