Self-Improvement
PHP 문자열 필터링 함수 취약점(POSIX Regex --> PCRE Regex) 본문
*POSIX Regex, PCRE Regex
정규표현식은 표준인 POSIX의 정규표현식과 POSIX 정규표현식에서 확장된 Perl방식의 PCRE가 대표적이며, 이외에도 수많은 정규표현식이 존재하며 정규표현식 간에는 약간의 차이점이 있으나 거의 비슷하다.
*예제
test.php
------------------------------
<?
$_id = $_GET[id];
if (eregi("admin",$_id))
echo "Filtered !!" . "<br>";
else
echo $_id . "<br>";
?>
--------------------------------
test.php?id=admin 으로 접근을 하게 되면 "Filtered !!" 라고 뜨게 되고 그 외 아이디를 입력하게 되면 해당 문자열을 출력된다.
문제가 없어 보이지만, PHP 5.3+ 부터 POSIX Regex 함수들을 사용할때 NULL문자를 만나게 되면 뒤의 문자열을 체크하지 않는 취약점으로 인해 사용되지 않게 되었습니다. 또한, PHP 6.0 부터는 아예 삭제되어지며 PHP 5.3+ 부터는 POSIX Regex 대신 PCRE Regex 를 사용하게 됩니다.
Function replacements
POSIX | PCRE |
ereg_replace() | preg_replace() |
ereg() | preg_match() |
eregi_replace() | preg_replace() |
eregi() | preg_match() |
split() | preg_split() |
spliti() | preg_split() |
sql_regcase() | No equivalent |
'Web' 카테고리의 다른 글
쿠키와 세션2 (0) | 2019.08.26 |
---|---|
SQLi 페이로드 (0) | 2019.07.22 |
php strcmp() 함수 취약점 (0) | 2018.10.20 |
php 비교 연산자 취약점(md5 매직해시) (0) | 2018.10.20 |
XML, JSON, Ajax, SOAP, REST (0) | 2018.10.20 |