Notice
Recent Posts
Recent Comments
Tags
- ASP.Net Core 404
- SSD 복사
- asp.net dropdownlist
- asp.net Select
- TempData
- 하드 윈도우 복사
- ViewData
- XSS방어
- 파일업로드 체크
- ViewBag
- javascript redirection
- 강제이동
- javascript 바코드 생성
- 맥 오라클설치
- XSS PHP
- 404에러페이지
- asp.net core Select
- 바코드 생성하기
- javascript 유효성체크
- javascript 바코드스캔
- 말줄임표시
- django 엑셀불러오기
- jquery 바코드생성
- jquery 바코드
- php 캐쉬제거
- 파일업로드 유효성체크
- 타임피커
- 하드 마이그레이션
- Mac Oracle
- 바코드 스캔하기
웹개발자의 기지개
[PHP] XSS 방어용 필터링 하기1 (GET/POST 변수들 막기) 본문
XSS 방어용 관련 소스를 만들어봤다.
최상단 include 부에 제일 먼저 넣어 삽입해 두자.
post 방식의 경우 에디터의 태그기능까지 htmlspecialchars() 함수로 인해 모두 막아버리기 때문에 유념하도록 하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?
function xss_filter($data) {
if(is_array($data)) {
// 배열인 경우 재귀적으로 각 요소에 대해 처리
foreach($data as $key => $value) {
$data[$key] = xss_filter($value);
}
} else {
$data = xss_keyword_filter($data);
// 문자열인 경우 XSS 필터링 적용
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
return $data;
}
// GET 요청 처리
$_GET = xss_filter($_GET);
// POST 요청 처리
$_POST = xss_filter($_POST);
function xss_keyword_filter($url) {
// JavaScript 이벤트 관련 함수 목록
$eventFunctions = array(
"onabort", "onafterprint", "onbeforeprint", "onbeforeunload", "onblur", "oncanplay", "oncanplaythrough",
"onchange", "onclick", "oncontextmenu", "oncopy", "oncut", "ondblclick", "ondrag", "ondragend",
"ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange",
"onemptied", "onended", "onerror", "onfocus", "onfocusin", "onfocusout", "onfullscreenchange",
"onfullscreenerror", "onhashchange", "oninput", "oninvalid", "onkeydown", "onkeypress",
"onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown",
"onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup",
"onmousewheel", "onoffline", "ononline", "onpagehide", "onpageshow", "onpaste", "onpause",
"onplay", "onplaying", "onpopstate", "onprogress", "onratechange", "onresize", "onscroll",
"onsearch", "onseeked", "onseeking", "onselect", "onstalled", "onstorage", "onsubmit",
"onsuspend", "ontimeupdate", "ontoggle", "onunload", "onvolumechange", "onwaiting"
);
// <script> 태그 제거
$url = preg_replace('/<\s*script\b[^>]*>(.*?)<\s*\/\s*script\s*>/i', '', $url);
// alert 함수 제거
$url = preg_replace('/\balert\s*\(/i', '', $url);
// JavaScript 이벤트 관련 함수 제거
foreach ($eventFunctions as $event) {
$url = preg_replace('/\b' . $event . '\s*=/i', '', $url);
}
return $url;
}
?>
|
cs |
'PHP' 카테고리의 다른 글
[PHP] 큰 이미지 업로드시 썸네일 이미지 생성중에 에러날때 (thumnail) (1) | 2024.04.17 |
---|---|
[PHP] XSS 방어용 필터링 하기2 (주소창에서 바로 막기) (0) | 2024.04.17 |
[PHP] Ajax JSON 형태로 DB내의 데이터값 불러오기 (0) | 2024.04.04 |
[PHP] 초간단 캡차, 스팸방지 기능 만들기1 (0) | 2024.03.26 |
[PHP] 네이버 스마트에디터2 - 413 Request Entity Too Large 에러날때 (0) | 2024.03.21 |
Comments