데이터베이스에는 MySQL, MSSQL, Oracle이 대표적이지만 안드로이드와 IOS에서 주로 사용되는 SQLite 가 존재한다.
데이터베이스 관련 취약점인 SQL Injection이 해당 데이터베이스에서도 발생되는데 이에 대한 대응방안을 찾아보았다.
PERL이나 PHP같은 스크립팅 언어에서는 쿼리를 종료하는 모든 문자열에 대해 다룰 수 있다. PHP 언어의 경우 SQLite에 특별한 입력 문자열에 대해 다루는 sqlite_escape_string()이라는 함수를 제공해준다.
아래는 해당 함수를 사용하는 예시이다.
// addslashes() 함수를 거친 데이터를 사용할 경우 결과가 이상하게 나옴
if(!get_magic_quotes_gpc()) {
$name = sqlite_escape_string($name);
}
$result = @$db->query("SELECT * FROM users WHERE username='{$name}'");
나의 경우 해당 함수를 사용하였는데 다음과 같은 에러가 발생하였다.
Fatal error: Call to undefined function sqlite_escape_string() in [파일명] on line 9
왜 그런지 알아보았는데 결론은 테스트 환경인 CentOS의 문제였다.
동일한 에러가 발생한다면 아래 Step대로 진행하면 해결될 것이다.
아래 php-5.X.X.tar.gz 부분은 버전정보를 입력하면 된다. ( "php -v" 명령어를 통해 확인 가능 )
wget http://museum.php.net/php5/php-5.X.X.tar.gz
tar xzvf php-5.2.XX.tar.gz
cd php-5.2.XX/ext/sqlite/
phpize
./configure
make
make install
echo extension=sqlite.so >> /etc/php.d/sqlite.ini
service httpd restart
* 만약 진행하다가 phpize 명령어가 안된다면 다음 명령어를 통해 php-devel를 설치
yum install php-devel*
참고 )
- https://www.tutorialspoint.com/sqlite/sqlite_injection.htm
- https://www.php.net/manual/en/function.sqlite-escape-string.php
- https://www.serveradminblog.com/2013/07/centos-5-call-to-undefined-function-sqlite_escape_string/
- https://medium.com/@a.m./solved-phpize-command-not-found-in-centos-6-4-6ee253419053
'Hacking > Web' 카테고리의 다른 글
JWT Signature - RS256 to HS256 (3) | 2020.02.27 |
---|---|
open_basedir setting and bypass (0) | 2019.12.31 |
HTTP 인증 우회 (0) | 2019.12.16 |
데이터 평문전송 대응방안 (2) | 2019.12.06 |
0.0.0.0 의 의미 (0) | 2019.11.20 |