๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์šธํƒ€๋ฆฌ ๋ณด์•ˆ ๋ณธ๋ฌธ

Server/๐ŸฌMySQL&๐Ÿ˜PHP

๐ŸฌMySQL&๐Ÿ˜PHP : ๋Œ๊ณ ๋ž˜์™€ ์ฝ”๋ผ๋ฆฌ์˜ ์šธํƒ€๋ฆฌ ๋ณด์•ˆ

4:Bee 2023. 10. 9. 22:04
728x90

์ด๋ฒˆ์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ ์›น์‚ฌ์ดํŠธ์˜ ๋ณด์•ˆ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ์ •๋ณด๋ฅผ ์ฒ ์ €ํžˆ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ๋†“์€ ์‚ฌ์ดํŠธ์˜ URL์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์กฐ์ž‘ํ•ด์„œ ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ SQL injection์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ ๋ณผ ๊ฒƒ์ด๋‹ค.

mysqli_real_escape_string()

index.php

if (isset($_GET['id'])) {
  $filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
  $sql = "SELECT * FROM topic WHERE id={$filtered_id}";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_array($result);
  $article['title'] = $row['title'];
  $article['description'] = $row['description'];
}

process_create.php

$filtered = array(
  'title' => mysqli_real_escape_string($conn, $_POST['title']),
  'description' => mysqli_real_escape_string($conn, $_POST['description'])
);

$sql = "
  INSERT INTO topic(title, description, created)
  VALUES(
    '{$filtered['title']}',
    '{$filtered['description']}',
    NOW()
  )
";

๊ฐ•์˜์—์„œ SQL injection์˜ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋”ฐ๋กœ ์–ธ๊ธ‰ํ•˜์ง€๋Š” ์•Š๊ฒ ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ์•„๋ž˜ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ•์˜๋ฅผ ์‚ดํŽด๋ณด์ž. (์ฐจํ›„์— ๋”ฐ๋กœ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.)

htmlspecialchars()

htmlsepcialchars()ํ•จ์ˆ˜๋Š” php์—์„œ HTML ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ create๋ฅผ ํ•  ๋•Œ ์ƒ์„ฑํ•˜๋Š” input๋ž€์— ํ•ด๋‹น HTML ํŠน์ˆ˜๋ฌธ์ž๋‚˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ƒ์„ฑํ•  ๋•Œ ์˜ค๋กœ์ง€ ๋ฌธ์ž๋กœ๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์— HTML์ฝ”๋“œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

while ($row = mysqli_fetch_array($result)) {
  $escaped_title = htmlspecialchars($row['title']);
  $list = $list . "<li><a href=\"index.php?id={$row['id']}\">{$escaped_title}</a></li>";
}

$article = array(
  'title' => 'Welcome',
  'description' => 'Hello, web'
);

if (isset($_GET['id'])) {
  $filtered_id = mysqli_real_escape_string($conn, $_GET['id']);
  $sql = "SELECT * FROM topic WHERE id={$filtered_id}";
  $result = mysqli_query($conn, $sql);
  $row = mysqli_fetch_array($result);
  $article['title'] = htmlspecialchars($row['title']);
  $article['description'] = htmlspecialchars($row['description']);
}

์œ„์˜ ์ฝ”๋“œ๋Š” htmlspecialchars๋ฅผ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ์ด๋‹ค.

728x90
Comments