시작
로그인 기능을 사용 할 때 mysql_escape_string 함수를 사용하는 이유는 ?
ex. mysql_escape_string($_POST[u_id])
이는 인젝션을 방어하기 위한 가장 기본적인 부분이다.
* 인젝션 : 해킹 또는 공격을 위한 의도적인 코드 변조(웹해킹의 한 종류)
ex. SQL문 같은 경우 where절을 이용하여 조건을 준 후, 데이터를 받아오는데 그 과정에서 논리연산자(and, or, not 등)을 이용해서 코드를 변경하는 것
💬설명
# 1. 아이디/비밀번호가 맞는 계정정보를 받아오는 코드를 작성
SELECT * FROM users WHERE id = "$_POST['id']" AND pw = "$_POST['pw']"
# 2. 악의적인 사용자는 $_POST['pw'] 의 값으로
" OR "1" = "1 이라는 값을 전달
# 3. 쿼리문
SELECT * FROM users WHERE id = "admin" AND pw = "" OR "1" = "1"
이 되며, 의도하던 바와는 다른 쿼리문이 실행됨
# 4. 방지하기 위해 mysql_escape_string 이라는 함수를 사용함.
$_POST['pw'] 에 mysql_escape_string 을 씌워주면 \" OR \"1\" \= \"1 이 됨.
ex. ( "" OR "1" = "1" ) ==> ( \" OR \"1\" \= \"1 )
# 5. 함수 사용 후 쿼리문은
SELECT * FROM users WHERE id = "admin" AND pw = " \" OR \"1\" \= \"1 " 이 됨.
# 6. 결론 : 악의적인 입력값이 따옴표를 벗어나 쿼리문으로 빠져나오지 않으므로, 보다 보안이 강화됨.
💬Example
mysql_escape_string(addslashes(htmlspecialchars($password)))
위 코드의 함수를 분해해서 보면 각각 3가지 함수가 사용됨.
1️⃣ mysql_escape_string
2️⃣ addslashes
3️⃣ htmlspecialchars
* \ : 백슬래시
- mysql_escape_string : \를 통해서
- addslashes : 따옴표 등에 \를 추가 (ex. I'm => I\'m)
- htmlspecialchars : < >
htmlspecialchars
: HTML 코드를 사전 정의된 문자로 바꾸어줌.
ex. echo htmlspecialchars('<b>굵게</b>'); => <b>굵게</b>
각각 < 가 < > 가 > 으로 변환됨.
이렇게 변환하게 되면 꺽쇠 괄호를 통해 부등호 연산시키려는 시도를 방지할 수 있음.
정리
원래 나타내야할 실행결과가 있는데, 임의로 코드가 실행되게 작성하면(인젝션) 개발자의 의도와 다르게 페이지 내용이 나타날 수 있음.
이를 방지하기 위해 <를 %lt;라는 형식등으로 바꿔줌.(위의 3가지 함수 모두 이와 같은 기능을 함)
즉, 코드 실행에 쓰이는 문자를 정해진 문자로 치환해준다.
코린이는 오늘도 배워갑니다 총총,,
'Development > PHP' 카테고리의 다른 글
[정규표현식] 정규식 문자열 제거(영문/숫자) (0) | 2021.12.28 |
---|---|
정규식 html 태그제거 (0) | 2021.12.28 |
정규식 공백제거(str_replace, preg_replace) (0) | 2021.12.28 |
인코딩 깨질 때 (0) | 2021.12.23 |
[Crawler] post 방식의 json 파싱 (0) | 2021.12.23 |