sql 쿼리 보안 문제 때문에 질문드립니다.
본문
<?php
include_once('./_common.php');
$mb_id = $member['mb_id'];
$bo_text = '텍스트 내용';
// SQL 쿼리 작성
$sql = "INSERT INTO g5_board_text (mb_id, bo_text) VALUES ('$mb_id', '$bo_text')";
// 쿼리 실행
$result = sql_query($sql);
if ($result) {
echo "데이터가 성공적으로 저장되었습니다.";
} else {
echo "데이터 저장에 실패했습니다: " . mysqli_error($connect_db);
}
?>
대략 이렇게 짜봤는데요. 데이터 연결은 common.php로 보안 설정이 될거 같은데,
나머지는 할 줄 몰라서 저렇게 기본적인것만 구현해봣습니다.
이 경우 보안에 위협 될 만한 요소가 있을까요??
$mb_id 는 로그인 한 유저 id 값이구요.
$bo_text 입력값은 아니고 지정 된 텍스트만 저장 하려고 합니다.
!-->답변 3
잠재적인 문제 발생을 차단하기 위해 다음처럼 시도해 볼수 있습니다.
<?php
include_once('./_common.php');
$mb_id = $member['mb_id'];
$bo_text = '텍스트 내용';
/*
// SQL 쿼리 작성
$sql = "INSERT INTO g5_board_text (mb_id, bo_text) VALUES ('$mb_id', '$bo_text')";
// 쿼리 실행
$result = sql_query($sql);
*/
$sql = 'INSERT INTO g5_board_text (mb_id, bo_text) VALUES (?, ?)';
$stmt = mysqli_prepare($connect_db, $sql);
mysqli_stmt_bind_param($stmt, 'ss', $mb_id, $bo_text);
$result = mysqli_stmt_execute($stmt);
if ($result) {
echo "데이터가 성공적으로 저장되었습니다.";
} else {
echo "데이터 저장에 실패했습니다: " . mysqli_error($connect_db);
}
?>
include_once('./_common.php');
$mb_id = $member['mb_id'];
$bo_text = '텍스트 내용';
// Prepared Statements 생성
$sql = "INSERT INTO g5_board_text (mb_id, bo_text) VALUES (?, ?)";
if ($stmt = $connect_db->prepare($sql)) {
// 바인딩 및 실행
$stmt->bind_param("ss", $mb_id, $bo_text);
$stmt->execute();
// 성공 여부 확인
if ($stmt->affected_rows > 0) {
echo "데이터가 성공적으로 저장되었습니다.";
} else {
echo "데이터 저장에 실패했습니다.";
}
$stmt->close();
} else {
echo "Prepared Statements 생성 실패: " . $connect_db->error;
}
더 낮은 보안을 한다면 이렇게 함으로써 입력된 데이터를 쿼리로부터 분리하여 SQL Injection과 같은 보안 취약점을 방지할 수 있다는것 참조해주세요
쿼리 취약은 다른분들이 달아주셨고
관리자만 실행하는 부분이라면 관리자 외에는 접속할수 없도록 최상단에 분기해주세요.
// 관리자가 아니라면
if (!$is_admin) alert('접근 권한이 없습니다.');