지금은 구세대의 유물처럼 되어가고 있는 PHP+MYSQL이지만
기존에 구축된 사이트가 많다보니 여전히 많이 쓰이고 있다.
PHP의 경우 MYSQL과 연동할 수 있는 mysqli 라는 라이브러리를 지원한다.
mysqli 없이 코딩된 조금... 아니 어쩌면 조금 많이 오래된 사이트 소스를 보면,
간혹 이런식으로 코딩되어있는 것을 발견할지도 모른다.
이럴수가
인젝션의 좋은 먹잇감이군요
여튼 SQL 인젝션은 너무 유명한 해킹 시도이고
그런 만큼 php에서도 인젝션을 막기 위한 라이브러리를 제공하고 있는데
그 중 하나가 mysqli의 stmt를 활용한 prepared statement이다.
대충 예시는 아래와 같다.
//DB연결
$mysqli = new mysqli($dbserver, $dbuser, $dbpasswd, $dbname);
if (mysqli_connect_errno()) {
die("Connection failed: " . $conn->connect_error);
}
//stmt 세팅
$stmt = $mysqli->stmt_init();
//구문 작성 (유저가 입력할 수 있는 부분은 ? 처리)
$sql = "INSERT INTO tb_chest_review(chest_id, username, content, user_ip, password) VALUES(?, ?, ?, ?, ?) ";
$stmt->prepare($sql);
//위 sql 문장에서 ? 처리된 부분을 패러미터로 바인드
$stmt->bind_param("sssss", $chest_id, $name, $content, $user_ip, $pass);
$stmt->execute();
$stmt->close();
1.mysqli 세팅 후
2.구문에서 유저가 입력하는 인자를 ?로 처리
3.bind_param으로 유저가 입력하는 인자를 넣음. 이 과정에서 인젝션을 방지한다.
4.실행
라이브러리로 다 제공되는거라 별거 없다. 문법도 간단.
혹시라도 내 홈페이지가 php라면, 그리고 정말 혹시라도. 아니겠지만... 내 홈페이지에 MYSQL 구문들이 위에 그림1번처럼 되어있다고 한다면
코드를 좀 수정하시는걸 추천.
p.s 그래서 이 글을 왜 쓰게 됐냐면
그림 1번같은 홈페이지를 실제로 봐서 그렇다.
인터넷은 정보의 바다이고 홈페이지는 정말 많다... 그리고 놀랍게도 말도 안되는 코드들이 실존한다. 오 마이...
'웹개발' 카테고리의 다른 글
애드센스 티스토리 자동광고 설정, 애드센스 신청 (0) | 2021.10.25 |
---|---|
파밍RPG 보스 레이드 시간표 페이지 관련 (0) | 2021.02.08 |
목록 상단 치환자가 없어 광고를 설정할 수 없습니다. 오류 해결하기 | 티스토리 애드핏, 애드센스 연동 치환자 스킨에 직접 추가하기 | (1) | 2020.11.17 |
유튜브 동영상 90도 회전하여 보는 페이지 만들었어요 (누운영상 회전, 직캠 회전 보기) (0) | 2020.07.13 |
개인정보처리방침 URL 만들기 (0) | 2020.01.21 |
댓글