Prepare Statement
= SQL Injection을 막기 위한 시큐어 코딩
prepare 미리 컴파일 하는 함수에 ?로 값을 만들어놓고
Bind_param으로 값을 바인딩(=매핑)해준다.
앞의 'sssssss'는 뒤의 값이 어떤 타입의 입력인지를 알려주는 역활을 한다. S는 문자형, i는 정수형 등으로 나뉜다.
[member_ok.php] 회원가입페이지
해쉬 값이 제대로 들어온 것을 확인, '와 같은 특수문자도 SQL Injection의 위험없이 그대로 입력된 것을 볼 수 있다.
[id_check.php] 회원가입페이지 내 아이디 중복 체크
값을 get_result로 받아야 정상 실행이 된다. 까다로운 함수 설정,,
[login_ok.php] 로그인페이지
해당 부분은 불러온 함수의 값을 변수에 넣는다. fetch_assoc 사용.
이를 기반으로 모든 파라미터 값을 수정해주면 된다. 사용한 코드를 첨부한다.
// insert
$sql= "INSERT INTO member(id, pw, name, adress, sex, email, role) VALUES(?,?,?,?,?,?,?)";
$stmt = $db->stmt_init();
$stmt = $db->prepare($sql);
$stmt->bind_param('sssssss', $_POST['userid'], $encrypted_pw , $_POST['name'], $_POST['adress'], $_POST['sex'], $email, $_POST['role']);
$encrypted_pw = password_hash($_POST['pw'], PASSWORD_DEFAULT);
$email = $_POST['email'].'@'.$_POST['emadress'];
$stmt -> execute();
//row num
$stmt = $db->stmt_init();
$uid=$_GET['userid'];
$sql= "SELECT * from member where id=?";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $uid);
$stmt-> execute();
$member = $stmt->get_result();
$num_of_rows = $member->num_rows;
$stmt -> close();
//fetch
$stmt = $db->stmt_init();
$sql= "SELECT * FROM member WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $_POST['id']);
$stmt-> execute();
$member = $stmt->get_result();
$row = $member->fetch_assoc();
'개발 > PHP' 카테고리의 다른 글
[시큐어 코딩] PHP - CSRF 대응방안 2차 인증 구현 - 회원정보 수정시 비밀번호 재입력 (0) | 2022.02.19 |
---|---|
[시큐어 코딩] PHP - SQLI 대응방안 Prepare Statement - like 함수편 (0) | 2022.02.19 |
[CSS] 디자인 - 웹페이지 크기에 따라 움직이는 객체 고정 (0) | 2022.02.17 |
[홈페이지 제작] 홈페이지 제작 과제 결과물 (0) | 2022.01.08 |
[홈페이지 제작] PHP 오류메세지 표시/숨김 (0) | 2022.01.08 |