PHP의 취약점을 검색하면 상당히 많은 검색결과를 볼 수 있다. 하지만 PHP 뿐만 아니라 모든 언어는 취약점이 발생하기 마련이다. 이런걸 보안하여 패치하는게 개발자의 일이기도 하다. 

 

그럼 PHP의 취약점 보완을 위해 버전 업그레이드를 받는다고 해서 취약점이 해결될까? 

 

절대 그럴일이 없다.. 이미 엉망인 소스에다가 PHP 버전을 업그레이드 받는다고 취약점이 해결되지는 않을것이다. PHP가 오래전 부터 욕먹었던 이유중 하나가 빠른 개발을 위해 막코딩을 하는 사람들이 많다보니 보안이 1도 없는 소스들이 난무 할 수 밖에 없었고 대형 사이트는 한번 타겟이 되는순간 큰 손해를 입게 된다. 

 

이렇듯 PHP가 취약하다고만 볼 수 없고 보안에 신경을 쓰지 않고 개발하는 개발자에게 문제가 있는셈이다. 물론 다른 언어들도 동일하겠지만 취약점은 사용자의 공격으로 부터 발생되는데 개발자는 항상 사용자의 입력이나 요청이 발생되는 구간은 신뢰도 0%의 마인드로 개발을 해야 보안을 강화 할 수 있다. 

 

흔히 알고 있는 웹 취약점에는 어떤것들이 있을까? 

 

1. SQL 인젝션 

사용자가 입력한 데이터에 쿼리문 취약점을 포함시켜 공격하는 행위이다. 이러한 공격은 addslashes 함수만 있어도 대부분 해결되지만 가장 좋은 방법은 PDO 또는 DB 프레임워크를 사용하여 쿼리문을 바인딩 하는 기법을 사용하는게 좋다.

 

2. XSS (Cross-Site-Scripting)

사용자가 입력한 데이터에 악성 스크립트 구문을 넣어 HTML 콘텐츠가 출력될 시 악성스크립트를 브라우저에서 실행시켜 공격하는 행위이다. 주로 게시판에 악성 스크립트 공격이 많고 주 목적은 쿠키를 탈취 하는것이다. 쿠키 데이터에는 로그인 인증 정보가 들어있기 때문에 관리자가 공격을 당한다면 큰 피해를 입을 수 있기 때문에 주의가 필요하다. 하지만 요즘은 쿠키 설정등이 강화되어 HTTPS 프로토콜과 쿠키 권장설정을 사용한다면 보안을 강화할 수 있다. 

 

3. CSRF (Cross-Site Request Forgery)

CSRF 는 `크로스 사이트 요청 위조`로 여러 공격패턴들이 있지만 간단한 공격중 하나는 글을 작성하는 구간에서 특정한 입력행위 없이 글작성이 완료되는 URL로 공격툴을 이용하여 무작위로 글등록을 하는 행위이다. 이정도 공격은 리캡챠 공격만으로도 막을 수 있다. 

 

단 이 공격이 무서운 이유중 하나가 인증된 사용자의 정보를 이용하여 공격시도를 할 수 있다는점이다. 공격 방식은 주로 요청 정보등을 위조하여 다른 사용자에게 이메일이나 문자등으로 URL을 전송 후 클릭을 유도하여 공격한다. 하지만 이러한 공격은 사이트의 처리 프로세서를 어느정도 파악하고 있어야 가능하기에 알려진 오픈소스 툴을 사용할 경우 CSRF 공격을 많이 당할 수 있다. 

 

위의 3가지 방식은 가장 많이 알려진 웹 취약점으로 PHP뿐만 아니라 다른 언어들도 해당되는 내용들이므로 항상 프로그래밍시 숙지해서 방어를 미리 해놓는게 좋다. 

 

PHP 버전이 업그레이드 됨에 따라 보안도 많이 향상되었고 프레임워크를 사용하면 웬만한 보안은 모두 제공이되기 때문에 대부분 사용하는것을 지향한다. 국내에서 사용하는 대표적인 PHP 프레임워크는 라라벨, 코드이그나이터등이 있다. 나도 초기에 코드이그나이터를 3.0 버전까지 사용했지만 지금은 자체 프레임워크를 사용중이다. 

 

결론적으로 PHP의 취약점이라고 말하는것들은 다른 언어에서도 발생할 수 있는 취약점이며 결국 따지고 보면 지푸라기로 집을 짓는냐 아니면 벽돌로 집을 짓느냐의 차이일 뿐 모든건 개발자의 역량일뿐 PHP 언어의 부족함이 아니란걸 말하고싶다.