XSS를 예방하기 위해서 HTML Entity로 이스케이프를 시켜줘야한다.
2021.11.20 - [N 스터디 👩💻/수업 기록] - [6주차]XSS 키로커 삽입과 대응방안
[6주차]XSS 키로커 삽입과 대응방안
* 참고사항 XSS 시 단순한 알림창에 위협을 느끼지 못하기 때문에 버그바운티나 실제 업무에서 보고서를 작성할 떄 위험하다는 것을 직관적으로 인지시켜주기 위해서 얼마나 영향력 있는 취약점
myungjjju.tistory.com
SQL 문 삽입 부분을 모두 Prepare Statement해주고 나서 추가로 변수에 htmlspecialchars() 함수를 사용했다.
아래는 코드 예시.
[게시글 작성 페이지]
DB에 이스케이프된 HTML문이 잘 삽입된 것을 확인할 수 있다.
예전처럼 XSS 공격을 시도해보아도 공격이 먹히지 않는 것을 확인했다.
간단한 함수 사용으로 XSS 사용을 막을 수 있다.
[글 쓰기 페이지] 부분 첨부
HTML Entity 치환을 위한 htmlspecialchars() 함수를 변수에 모두 적용해주고
SQL Injection 예방을 위해서 prepare 함수를 썼다.
파일 업로드 부분은 웹 경로와 분리하기 위해서 루트에 upload 파일을 만들어 구성 중이다,
if(isset($_POST['lockpost'])){
$lo_post = '1';
}else{
$lo_post = '0';
}
$name = htmlspecialchars($_POST['name']);
$pw = htmlspecialchars($_POST['pw']);
$title = htmlspecialchars($_POST['title']);
$content = htmlspecialchars($_POST['content']);
$date = date('Y-m-d h-i-s');
$hit = 0;
$thumbup = 0;
$tmpfile = $_FILES['b_file']['tmp_name'];
$o_name = $_FILES['b_file']['name'];
$filename = iconv("UTF-8", "EUC-KR",$_FILES['b_file']['name']);
$folder = "../../../../../../../upload/".$filename;
move_uploaded_file($tmpfile,$folder);
$encrypted_pw = password_hash($pw, PASSWORD_DEFAULT);
if($name && $encrypted_pw && $title && $content){
$sql= "INSERT INTO board(name,pw,title,content,date, hit, thumbup, lo_post, file) VALUES(?,?,?,?,?,?,?,?,?)";
$stmt = $db->stmt_init();
$stmt = $db->prepare($sql);
$stmt->bind_param('sssssiiis', $name, $encrypted_pw, $title, $content, $date, $hit, $thumbup, $lo_post, $o_name);
$stmt -> execute();
'개발 > PHP' 카테고리의 다른 글
[시큐어 코딩] PHP - 인가취약점 예방, form 변수 값 자동 넘기기,document.getElementById().submit() 사용. (0) | 2022.02.20 |
---|---|
[시큐어 코딩] PHP - 인증 취약점을 막기 위한 세션 변수 사용 (0) | 2022.02.19 |
[시큐어 코딩] PHP - CSRF 대응방안 2차 인증 구현 - 회원정보 수정시 비밀번호 재입력 (0) | 2022.02.19 |
[시큐어 코딩] PHP - SQLI 대응방안 Prepare Statement - like 함수편 (0) | 2022.02.19 |
[시큐어 코딩] PHP - SQLI 대응방안 Prepare Statement (0) | 2022.02.18 |