Unix/*Nix계통 팁

웹프로그래밍시 주의할 점 몇가지

ForceCore 2007. 7. 17. 11:01

Ajax입문 책에서 발췌했다.

한빛미디어., 타카하시 토시로 저 | 이창신 역

 

page 28

외부에서 스크립트를 주입하는 것에 당해선 안 된다.

 

php의 request로 <script>alert('안녕하세요')</script>따위를 보냈다고 하자.

 

$data에

"<script>alert('hello world!')</script>"

가 들어가게 되었다고 하자.

 

echo $data라고 하면 브라우저의 request로 들어간 것이 브라우저로 바로 실행이 되어서 hello world 창이 떠버린다.-_-;;; 그런 식이면 곤란하다.

 

$data = htmlspecialchars( $data );

로 꺾쇠를 &lt; 등의 것으로 바꿔주는 것이 필요하다.

 

ajax는 특성상

eval( "var test = " + oj.resposeText );

따위의 것이 들어가기도 하는데...

responseText의 내용이 밖에서 넘어온 스크립트를 통해 훤히 보이지 않도록 주의해야 함.

그것을 위해 외부에서 주입된 script가 보이지 않도록 하는 것이다.

 

SQL문도 비슷하다. SQL injection이라고 하는데... (OS명령어도 비슷한 것이 있다.)

$sql = "SELECT * FROM tableA WHERE id = " . $GET_['id'] . ";";

이런 sql문을 만들었다고 하자.

id request를 브라우저로 적절히 보내서

$GET_['id']가 '; DROP TABLE table A;' 라고 교묘하게 되어있다면 tableA가 작살나는 것이다 -_-;;;; 작은 따옴표와 같은 특수기호로 하는 공격도 있어서, mysql_escape()와 sqlite_escape_string()함수를 이용해 특수기호를 처리한 뒤에 sql문을 만들어야 함.

 

system()함수도 비슷하다. system()이나 `로 OS에 직접 명령을 내리는 부분이 생긴다면

그 부분을 주의해야 함. escapeshellarg(), escapeshellcmd()와 같은 PHP의 함수를 사용해 이상한 명령어가 실행되지 않도록 할 것.

 

PHP는 php.ini에 magic_quotes_gpc옵션이 있다. 이를 on으로 만들기를 권장한다.

여러가지 이상한 특수기호를 자동으로 처리해준다.