테스트 사이트 - 개발 중인 베타 버전입니다

sql 쿼리 보안 문제 때문에 질문드립니다. 채택완료

싸이언 1년 전 조회 1,909

</p>

<p><?php

include_once('./_common.php');</p>

<p>

$mb_id = $member['mb_id'];

$bo_text = '텍스트 내용';</p>

<p>// SQL 쿼리 작성

$sql = "INSERT INTO g5_board_text (mb_id, bo_text) VALUES ('$mb_id', '$bo_text')";</p>

<p>// 쿼리 실행

$result = sql_query($sql);</p>

<p>if ($result) {

    echo "데이터가 성공적으로 저장되었습니다.";

} else {

    echo "데이터 저장에 실패했습니다: " . mysqli_error($connect_db);

}

?></p>

<p>

 

 

대략 이렇게 짜봤는데요. 데이터 연결은 common.php로 보안 설정이 될거 같은데,

나머지는 할 줄 몰라서 저렇게 기본적인것만 구현해봣습니다.

 

이 경우 보안에 위협 될 만한 요소가 있을까요??

 

$mb_id 는 로그인 한 유저 id 값이구요.

$bo_text 입력값은 아니고 지정 된 텍스트만 저장 하려고 합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
1년 전

잠재적인 문제 발생을 차단하기 위해 다음처럼 시도해 볼수 있습니다.

</p>

<p><?php

include_once('./_common.php');</p>

<p>$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);

}

?></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

싸이언
1년 전
아 이해했습니다. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

쿼리 취약은 다른분들이 달아주셨고

관리자만 실행하는 부분이라면 관리자 외에는 접속할수 없도록 최상단에 분기해주세요.

 

// 관리자가 아니라면

if (!$is_admin) alert('접근 권한이 없습니다.');

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

싸이언
1년 전
한결 마음이 편해지네요. 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

웅푸
1년 전

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과 같은 보안 취약점을 방지할 수 있다는것 참조해주세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

싸이언
1년 전
네 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인