iframe 제거
$STRING=preg_replace("!<iframe(.*?)<\/iframe>!is","",$STRING);
script 제거
$STRING=preg_replace("!<script(.*?)<\/script>!is","",$STRING);
meta 제거
$STRING=preg_replace("!<meta(.*?)>!is","",$STRING);
style 태그 제거
$STRING=preg_replace("!<style(.*?)<\/style>!is","",$STRING);
를 공백으로 변환
$STRING=str_replace(" "," ",$STRING);
연속된 공백 1개로
$STRING=preg_replace("/\s{2,}/"," ",$STRING);
태그안에 style= 속성 제거
$STRING=preg_replace("/ style=([^\"\']+) /"," ",$STRING); // style=border:0... 따옴표가 없을때
$STRING=preg_replace("/ style=(\"|\')?([^\"\']+)(\"|\')?/","",$STRING); // style="border:0..." 따옴표 있을때
태그안의 width=, height= 속성 제거
$STRING=preg_replace("/ width=(\"|\')?\d+(\"|\')?/","",$STRING);
$STRING=preg_replace("/ height=(\"|\')?\d+(\"|\')?/","",$STRING);
img 태그 추출 src 추출
preg_match("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i",$STRING,$RESULT);
preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i",$STRING,$RESULT);
호스트 추출
<?
preg_match("/^(http:\/\/)?([^\/]+)/i","http://www.naver.com/index.html",$matches);
$host = $matches[2];
echo$matches[0]."<br>";
echo$matches[1]."<br>";
echo$matches[2]."<br>";
?>
해당 소스는 preg_replace, preg_match, preg_match_all 함수를 사용하였으며 PHP4, PHP5, PHP7에서 사용할 수 있습니다. 보안에 문제가되는 iframe, script, style 과 같은 함수는 글 제목이나 내용에서 필수적으로 삭제하는 게 좋습니다.
//iframe 제거
$STRING = preg_replace("!<iframe(.*?)<\/iframe>!is","",$STRING);
//script 제거
$STRING = preg_replace("!<script(.*?)<\/script>!is","",$STRING);
//meta 제거
$STRING = preg_replace("!<meta(.*?)>!is","",$STRING);
//style 태그 제거
$STRING = preg_replace("!<style(.*?)<\/style>!is","",$STRING);
// 를 공백으로 변환
$STRING = str_replace(" "," ",$STRING);
//연속된 공백 1개로
$STRING = preg_replace("/\s{2,}/"," ",$STRING);
//태그안에 style= 속성 제거
$STRING = preg_replace("/ style=([^\"\']+) /"," ",$STRING); // style=border:0... 따옴표가 없을때
$STRING = preg_replace("/ style=(\"|\')?([^\"\']+)(\"|\')?/","",$STRING); // style="border:0..." 따옴표 있을때
//태그안의 width=, height= 속성 제거
$STRING = preg_replace("/ width=(\"|\')?\d+(\"|\')?/","",$STRING);
$STRING = preg_replace("/ height=(\"|\')?\d+(\"|\')?/","",$STRING);
//img 태그 추출 src 추출
preg_match("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i",$STRING,$RESULT);
preg_match_all("/<img[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i",$STRING,$RESULT);
간단한 팁
사이트 제목이나 성명, 이메일 등 특정 스크립트를 사용하지 못하게 하는 경우에는 간단한 치환만으로도 보안 문제를 해결 할 수 있습니다. HTMLSPECIALCHARS 함수도 문자열에서 특정한 특수문자를 HTML 엔티티로 변환해주는 동일한 기능으로 볼 수 있습니다.
$_POST["name"] = STR_REPLACE("<","<",$_POST["name"]);
$_POST["name"] = STR_REPLACE(">",">",$_POST["name"]);
특수문자 | 변환된 문자 |
& (엔퍼샌트) | & |
"" (겹 따옴표) | " |
'' (홑 따옴표) | ' |
< (적다) | < |
> (크다) | > |
'얕고넓은지식 > linux' 카테고리의 다른 글
centos7 https 보안설 (0) | 2021.08.02 |
---|---|
전동 스케이트보드 부품 (0) | 2021.08.02 |
AMINA+1.8.2+-+G5.3.1.6+-+YC5.3.1.6 (0) | 2021.05.02 |
Centos 7 [root@localhost /]# unmount /dev/sdabash: unmount: 명령을 찾을 수 없습니다... (0) | 2021.04.18 |
php 정규식 (0) | 2021.04.14 |
php 문법검사 오류검사 체크사이트 (0) | 2021.04.11 |
Apache/2.4.6 (CentOS) PHP/7.3.27그누보드 회원가입 시 비밀번호 특수문자 적용 8자리이상 (0) | 2021.04.11 |
#1067 - 'mb_nick_date'의 유효하지 못한 디폴트 값을 사용하셨습니다. (0) | 2021.04.09 |
Centos 7 리눅스 mysql 파일 복원 (0) | 2021.04.06 |
AMINA+1.8.45+-+G5.3.3.3+-+YC5.3.3.3.1 (0) | 2021.03.25 |