티스토리 뷰


  addslashes


  ㆍ데이터베이스의 질의에서 처리할 필요가 있는 문자 앞에 백슬래시를 붙인 문자열을 반환한다. 이때 처리할 필요가 있는

     문자는 싱글쿼터( ' ) , 더블쿼터 ( " ), 백슬래시( \ ), NUL( NULL 바이트 )가 있다.


  ㆍDB 작업을 할때 쿼리를 작성하는데, 이때 DB의 구분 기준인 싱글쿼터( ' ) , 더블쿼터 ( " ), 백슬래시( \ ), NUL( NULL 

    바이트 )를 사용한다. 이때 하나의 문자열 안에 싱글쿼터나, 더블쿼터 같은 구분자가 들어가게 되면 예상치 못한 오류를

    발생 시킨다. 이러한 예상치 못한 오류는 취약점으로 이어지기 때문에 DB관리에서 주의 해야 한다. 실제로 이러한 취약점

    들은 SQL Injection등으로 이어지기 쉽다.



  사용법


  ㆍaddslashes( 이스케이프할 문자열 ) 

  ㆍ문자열 위치에는 문자열대신 변수가 올 수도 있다.



  사용예


 ↑ addslashes를 사용하지 않고 그대로 출력한다면, 싱글쿼터가 그대로 출력된다. 


 ↑ addslashes를 이용해서 문자열안의 구분자를 자동으로 이스케이프 처리할 수 있다. 



 ↑ vi /etc/php.ini 파일에 745줄에 있는 magic_quotes_gpc 옵션을 on으로 설정한다면, 자동적으로 모든 GET,POST,COOKIE 데이터에

    addslashes( )을 실행한다. 

   # magic_quotes_gpc로 이스케이프된 문자열에 addslashes( )를 또 사용하면 두번 이스케이프 처리되므로 주의해야 한다.

   # addslashed( )와 magic_quotes_gpc 옵션으로 SQL Injection에대한 기본적인 방어가 가능하지만 완벽한 보안은 아니기 때문에

      항상 최선책을 찾아야 한다. 




  주의


  

  ㆍ시큐어 코딩을 기반으로 한다면 magic_quotes_gpc는 끄고 데이터베이스에 입력할 때 직접 이스케이핑을 하는것이

     보안상 좋다고 한다. MySQL을 쓴다면 mysql_real_escape_string 등의 함수를 사용할 수 있다.


  ㆍDB구축과 코딩에 있어서 미처 시큐어 코딩을 생각하지 못했다면 magic_quotes_gpc 옵션을 on으로 해놓는것도

     기본적인 injection대한 기초적인 방어 역활을 할 수 있다.


  ㆍ중점은 magic_quotes_gpc가 제공하는 몇 가지 필터링과 기능에 의존한 코딩은 피하는 것이 좋다.