처음부터 차근차근

PHP 보안 본문

프로그래밍/PHP

PHP 보안

_soyoung 2021. 10. 5. 14:42
반응형
Cross Site Scripting

 

Cross Site Scripting(=XSS) 이란, 웹 사이트에다가 script를 주입하는 것이다.

예를 들어서 누군가가 text칸에다가

 

<script>location.href="https://google.com";</script>

 

이런 것을 넣었다고 가정해보자.

그러면 사용자가 특정 카테고리를 클릭했을 때 갑자기 구글로 이동이 된다.

이렇게 누군가가 원래 코드에 script를 삽입하여 공격하는 것을 cross site scripting이라고 한다.

 

<XSS 막는 방법>

사용자가 입력한 것을 출력하는 모든 부분에다가 htmlspecialchars()를 사용한다.

<?php
    htmlspecialchars(출력할 부분);
?>

이렇게 하면 사용자가 입력한 내용이 <script></script>이라도 모두 출력된다.

 

ex)

입력 칸에 script를 넣는다.
결과 : 그대로 출력

 

 

 

 

url을 통한 공격

 

url에다가 파일 경로를 써서 그 파일의 내용을 알아내는 것이다.

예를 들어서 서버에 사용자들의 정보가 들어있는 information.txt파일이 있다고 가정해보자.

information.txt 파일은 현재 main페이지의 상위 디렉토리에 있다.

그래서 웹 애플리케이션의 파일 구조를 대충 예상한 해커는 main 페이지의 url에다가 ../information.txt(../은 상위 디렉토리를 뜻함)를 친다.

그러면 information.txt파일이 그냥 화면에 출력되는 것이다.

이처럼 url을 이용해 공격하면 내부 파일의 내용을 볼 수 있다.

 

<url 공격 막는 방법>

파일의 내용이 출력되는 곳에다가 basename()메서드를 사용한다.

<?php
    basename("파일경로");
?>

basename()메서드는 파일경로에서 맨 마지막의 파일명만 추출해주는 함수이다.

 

ex)

url
코드
결과

basename() 메서드를 사용하면 information.txt앞에 ../이 없어지고 information.txt만 나오는 것을 알 수 있다.

 

 

 

+ post 방식으로 id값 받아서 파일 제거하는 코드(ex : unlink("./data/".basename($_POST['ranguage']));)에다가도 basename()메서드를 사용해야 한다.

왜냐하면 크롬에서 f12키 누르고 Network에 들어가서 preserve log(서버랑 주고 받는 정보 기록 쌓아두는 역할)누르고 파일을 삭제하면 post방식이더라도 어떤 파일을 호출하고 어떤 전송방식(get, post)인지, form data를 보면 어떤 값을 전달하고 있는지 알 수 있다. 

그래서 공격을 하려는 사람이 삭제할 때 ../같은 경로를 써서 파일을 전달하면 그 파일이 삭제가 될 수 있기 때문이다.

 

 

 

 

 

 

출처 : 'WEB2-PHP' - 생활코딩 변형 및 요약

반응형

'프로그래밍 > PHP' 카테고리의 다른 글

date time을 오전 00:00, 오후 00:00로 나타내기  (0) 2022.06.06
date를 '~일 전', '~ 분 전' 으로 나타내는 방법  (0) 2022.02.19
PHP 기본 정리 2  (0) 2021.10.04
PHP 기본 정리  (0) 2021.10.03
PHP의 원리  (0) 2021.10.02
Comments