๋ณด์
PHP ๋ณด์
์ ๋ณด ๋น์ฆ๋์ค์ ํต์ฌ์ด ๋ฉ๊น?
์ฝ๋? ์ฝ๋๋ ๋น์ฐํ ์ค์ํ๋ค. ์ต์ ์ ๊ฒฝ์ฐ์๋ ์ฝ๋๋ฅผ ๋ค์ ์ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์์ด๋ฒ๋ฆฌ๋ฉด ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ๋ฐ์ดํฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ ์ปดํจํฐ๋ ์ด๋ฐ ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์ด์๊ฐ๋ ์ง์ด๋ผ๊ณ ๋ ํ ์ ์๋ค.
์ฆ ์๋ฒ์๋ ๋ฐ์ดํฐ๊ฐ ์ด๊ณ ์๋ค.
๊ทธ๋ ๊ธฐ์ ์๋ฒ์ ์ ์ํ ๋๋ ๊ฒฝ๊ฑดํ ๋ง์์ผ๋ก ํด์ผ ํ๋ค.
ํ์ฌ ๋ง๋ค๊ณ ์๋ JavaScript์ ๋ณด์์ ์ธ ์ด์์ ๋ํด ์์๋ณด๋๋ก ํ์.
๋จผ์ , JavaScriptํ์ด์ง์ ์ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ๋ณด๋๋ก ํ์.
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด ๋ณธ๋ฌธ์ scriptํ๊ทธ ์ฌ์ด์ alert("merong");์ ์ ๊ณ ์ ์ถ์ ํ๊ฒ ๋๋ฉด,
์ด๋ ๊ฒ Security์ ์ ์ํ ๋๋ง๋ค ๋ฉ๋กฑ์ด๋ผ๋ ๊ฒฝ๊ณ ๋ฌธ์ด ๋จ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
์ง๊ธ์ ๊ทธ์ merong์ด ๋์ค๋ ๊ฒฝ๊ณ ๋ฌธ์ผ ๋ฟ์ด์ง๋ง,
์ฌ์ค ์ด๊ฑด ๋งค์ฐ ์ฌ๊ฐํ ์ด์์ด๋ค.
javascript๋ ์์ ์ฑ์ด ๋์ ์ธ์ด์ด๊ธฐ์ , ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์๋ผ ์๋ ์๊ณ , ๋ํ ๋ค๋ฅธ ์ฌ์ดํธ๋ก ๋ณด๋ผ ์๋ ์์ผ๋ฉฐ,
๋ค์ํ ์ ์ฉํ ์ ์๋ ์ฌ๋ก๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ธฐ์ ์ด๋ฐ ์ํฉ์๋ scriptํ๊ทธ๋ฅผ ์ฌ์ฉ์ ๋ชปํ๊ฒ ํ๊ฑฐ๋, HTML ์ฝ๋ ๊ทธ๋๋ก ์ถ๋ ฅ์ด ๋๊ฒ ํด์ผ ํ๋ค.
HTML์์ ๊บฝ์ <>๋ ํ๊ทธ๋ฅผ ๊ฐ์ธ์ค ๋ ํ์ํ ํ๊ทธ์ด๋ค.
ํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ๋ณธ๋ฌธ ์์ญ์ ๊บฝ์ ๋ฅผ ํํํด์ผ ํ๋ค๋ฉด, ์ด๋ป๊ฒ ํํํ๋ ๊ฒ ์ข์๊น
character entity reference chart → https://tools.w3cub.com/html-entities
Character Entity Reference Chart - W3cubTools
Character Entity Reference Chart, show you the character entity in one screen. easy to search and copy.
tools.w3cub.com
ํด๋น ์ฌ์ดํธ์์ ๊บฝ์ <> ํ์๋< >๋ก ํํ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ๋ชจ๋ ํน์๊ธฐํธ๋ฅผ ์ ๋ ๊ฒ ์ ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ๋ค.
๊ทธ๋์ PHP์๋ ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ ๋. ๊ทธ ์ ๋ณด์ค ํน์๊ธฐํธ๋ฅผ ์๋์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ด์ฅ ํจ์๊ฐ ์๋ค.
๊ทธ๊ฒ์ htmlspecialchars()์ด๋ค.
<?php
echo htmlspecialchars("<a>");
?>
์๋ ๊ทธ๋ฅ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด <a>๋ htmlํ๊ทธ๋ก ์ธ์๋์ด ์ถ๋ ฅ๋์ง ์๋๋ค.
ํ์ง๋ง htmlspecialchars๋ฅผ echo๋ก ์ถ๋ ฅํ๋ฉด ๋ณํ๋์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ ๋ ๊ฒ ์ถ๋ ฅ๋ ํ์ด์ง์ ์์ค๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ ๊ฒ ์๋์ผ๋ก ๋ณํ๋์ด ์ถ๋ ฅ๋๋ค.
์ด๋ฐ htmlspecialchars๋ ๋ณด์์ ๋งค์ฐ ์ค์ํ API์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, ํ์ฌ ๋ง๋ค๊ณ ์๋ JavaScript์ฌ์ดํธ์์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ์ ๋ณด๋ค์ ๋ชจ๋ htmlspecialchars๋ก ๊ฐ์ธ์ฃผ์ด์ผ,
๋ณด์์ ์ข๋ค๊ณ ํ ์ ์๋ค.
while($row = mysqli_fetch_assoc($result)){
echo '<li><a href="http://localhost/index.php?id='.$row['id'].'">'.htmlspecialchars($row['title']).'</a></li>'."\n";
if(empty($_GET['id']) === false){
$sql = 'SELECT * FROM topic WHERE id='.$_GET['id'];
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
echo '<h2>'.htmlspecialchars($row['title']).'</h2>';
echo htmlspecialchars($row['description']);
์ด๋ ๊ฒ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๋ถ๋ถ(title, description)์ htmlspecialchars๋ก ๊ฐ์ธ์ฃผ๊ณ ๋ค์ ์ด์ ์ ์ผ๋, Security๋ฅผ ๋ค์ด๊ฐ๋ฉด
์ด๋ ๊ฒ ๊ฒฝ๊ณ ๋ฌธ์ด ๋จ์ง ์๊ณ , script๊ฐ ๋ฌธ์๋ก ์ถ๋ ฅ๋๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
ํ์ง๋ง, ์ด๋ ๊ฒ ์ถ๋ ฅ์ด ๋๋ฉด ๋ฐ์๋๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ด๋ ๊ฒ html๋ก์จ ๋ณธ๋ฌธ์ ๊ธฐ๋ฅ์ ํด์ผ ํ๋ ํ๊ทธ๋ค, ๋งํฌ๋ก ์๋ํด์ผ ํ๋ ํ๊ทธ, ์ด๋ฏธ์ง๊ฐ ์ถ๋ ฅ๋์ด์ผ ํ๋ ํ๊ทธ๊น์ง
๋ชจ๋ ๋ฌธ์๋ก ์ถ๋ ฅ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋ด ๋๋ strip_tags() ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํด ํ๊ทธ๋ค์ ๊ถํ์ ์ค์ ํ ์ ์๋ค.
if(empty($_GET['id']) === false){
$sql = 'SELECT * FROM topic WHERE id='.$_GET['id'];
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
echo '<h2>'.htmlspecialchars($row['title']).'</h2>';
echo strip_tags($row['description'],'<a><h1><h2><h3><h4><h5><ul><ol><li>');
์ด๋ ๊ฒ ๋ณธ๋ฌธ ์์ญ์๋ strip_tags()๋ฅผ ์ฌ์ฉํด ์ด๋ค ํ๊ทธ๋ ํ์ฉํ๊ณ ๋๋จธ์ง ํ๊ทธ๋ ๋ฌธ์๋ก ์ถ๋ ฅ๋๊ฒ ํ ์ ์๊ฒ ๋๋ค.
MySQL ๋ณด์
์ ๋ฒ PHP์ด๋ก ์ ๋ํด ๋ฐฐ์ฐ๋ ์ค, PHP๋ฅผ ์ด์ฉํ ๊ฐ๋จํ if๋ฌธ์ ํ์ฉํด ๋ก๊ทธ์ธํ๋ ๊ธฐ๋ฅ์ ๋ง๋ ์ ์ด ์๋ค.
๊ทธ๊ฑธ DataBase๋ฅผ ํตํด ๋ง๋ค์ด ๋ณด๋๋ก ํ์.
๋จผ์ DataBase์ id์ password๊ฐ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก opentutorials DataBase์ user์ด๋ผ๋ ์๋ก์ด table์ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
table์์ฑ์ด ๋๋๊ณ INSERT INTO๋ฅผ ์ฌ์ฉํด ์์ด๋์ ํจ์ค์๋๋ฅผ ์์๋ก ๋ช ๊ฐ ์์ฑํด์ฃผ๋๋ก ํ์.
์ด๋ ๊ฒ ์์๋ก 6๊ฐ์ง์ ์์ด๋์ ํจ์ค์๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ ์น์ด ํ์ํ๋ค.
๋จผ์ ์๋ก์ด php ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
<?php
$conn = mysqli_connect('localhost','root','111111');
mysqli_select_db($conn, 'opentutorials');
$sql = "SELECT * FROM user WHERE name='".$_GET['name']."' AND password='".$_GET['password']."'";
$result = mysqli_query($conn, $sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$login = $result->num_rows;
if($login == "0"){
echo "๋ก๊ทธ์ธ์ ์คํจํ์์ต๋๋ค.";
} else {
echo "๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์์ต๋๋ค.";
}
?>
</body>
</html>
์์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง๋ค์ด ์ฃผ์๋ค.
$conn์ DataBase์ ๋ค์ด๊ฐ๋ ์ญํ ์ ํด์ฃผ๋ ๋ณ์์ด๋ค.
mysqli_select_db๋ ์ด๋ DataBase์ ๋ค์ด๊ฐ ๊ฑด์ง ์ ํํ๋ ํจ์์ด๋ค.
$sql์ url์ ์ ๋ ฅํ๋ name๊ณผ password๊ฐ DataBase์ ์๋์ง ํ์ธํด์ ์์ผ๋ฉด $sql๋ณ์์ ๋ด์์ฃผ๋ ๋ณ์์ด๋ค.
$result๋ ์๋ฒ์ ์ ์กํ๋ ์ญํ ์ ํ๋ค.
์ด๋ ๊ฒ ์ ์์ ํด์ฃผ๊ณ , bodyํ๊ทธ์ if๋ฌธ์ ์์ฑํด $login ๋ณ์์ $result->num_rows๋ฅผ ๋ฃ์ด์ค๋ค.
์ฌ๊ธฐ์ $result->num_rows๋ ๋ก๊ทธ์ธ์ด ์ฑ๊ณต์ ํ ๋๋ name๊ณผ password๊ฐ ์ผ์นํด์ ๋ก๊ทธ์ธ์ด ๋๋ค.
๊ทธ ์ผ์น๊ฐ ๋ ๋ num_rows์ ๊ฐ์ 1์ด ๋๋ค. ์ฐธ์ ์ซ์๋ก 1์ด ๋๊ณ ๊ฑฐ์ง์ ์ซ์๋ก 0์ด ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก, $login์ด 1์ด ๋๋ฉด ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๊ณ , 0์ด๋ฉด ๋ก๊ทธ์ธ์ด ์คํจํ๋ ์กฐ๊ฑด๋ฌธ์ ๋ง๋ค์ด ์ฃผ์๋ค.
ํ์ง๋ง, ์ฌ๊ธฐ์๋ ์น๋ช ์ ์ธ ๊ฒฐํจ์ด ์๋ค.
์ปค๋งจ๋๋ก SELECT๋ฅผ ํด๋ณด๋๋ก ํ์.
์ ์ปค๋งจ๋ ์ฌ์ง์ ํ์ธํ๋ฉด user table์๋ zzzz๋ผ๋name๋ ์๊ณ , 0000์ด๋ผ๋ password ๋ํ ์๋ค.
ํ์ง๋ง ๋ชจ๋ name๊ณผ password๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ ์ด์ ๋ or 1=1 ๋๋ฌธ์ด๋ค.
or์ ๋๋ ์ด๋ผ๋ ๋ง๊ณผ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ 1=1์ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ์ฐธ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก id์ password๊ฐ ์ผ์นํ์ง ์์๋ 1=1์ ์ฐธ์ด๋ฉฐ, or์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
๋ชจ๋ name๊ณผ password๊ฐ ์ฐธ์ด ๋๋ฉด์ ๋ชจ๋ table์ด ๋์ค๋ ๊ฒ์ด๋ค.
์ด์ ์น ์ฌ์ดํธ์์ ํ์ธ์ ํด๋ณด์.
<?php
$conn = mysqli_connect('localhost','root','momo0415');
mysqli_select_db($conn, 'opentutorials');
$sql = "SELECT * FROM user WHERE name='".$_GET['name']."' AND password='".$_GET['password']."'";
echo $sql;
$result = mysqli_query($conn, $sql);
?>
๋จผ์ ์น์์ sql๋ฌธ์ ํ์ธํ ์ ์๋๋ก $sql์ ์ถ๋ ฅํ๋ ์ฝ๋๋ฅผ result์์ ๋ฐฐ์น์์ผฐ๋ค.
์ด๋ ๊ฒ name์ผ๋ก zzzz๋ฅผ ์ฃผ๊ณ , password๋ก 0000์ ์ฃผ์์ ์ ๋ก๊ทธ์ธ์ ์คํจํ๋ฉฐ,
SELECT๋ฌธ์ด ์ด๋ค์ง ํ์ธํ ์ ์๋ค.
ํ์ง๋ง http://localhost/phpjs/14_copy.php? name=zzzz&password=0000' or '1=1์ด๋ผ๊ณ ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ค๋ฉด,
์๋์ผ๋ก password์ ์์๋ฐ์ดํ๊ฐ ๋์ ๋ถ๊ธฐ ๋๋ฌธ์ ์๋ฒฝํ SQL๋ฌธ ์ฐธ์ด ๋์ค๊ฒ ๋๋ฉฐ,
๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์๋ค๋ ๋ฉ์์ง๊ฐ ๋จ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ user table์ ์๋ก์ด ๊ณ์ ์ ์ถ๊ฐํด๋ณด์.
๋ง์ฝ ๋น๋ฐ๋ฒํธ ์์ ์์๋ฐ์ดํ๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น,
๊ทธ๋ฅ ์์ ๋ฐ์ดํ๋ฅผ ์ค๊ฐ์ ๋ฃ์ด๋ฒ๋ฆฌ๋ฉด Error๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ์ \' ์ด๋ ๊ฒ ์์๋ฐ์ดํ๋ฅผ ์ ์ผ๋ฉด ์์๋ฐ์ดํ ํํ๋ก ๊ณ์ ์ด ์์ฑ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
PHP๋ฅผ ํ์ฉํด DataBase์ ์์๋ฐ์ดํ๋ฅผ ๋ฌธ์๋ก ์ถ๋ ฅํ ์ ์๋ค๋ฉด ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๋จผ์ mysqli_real_escape_string()์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํด ์ถ๋ ฅ์ ํด๋ณด์.
$conn = mysqli_connect('localhost','root','momo0415');
mysqli_select_db($conn, 'opentutorials');
echo mysqli_real_escape_string($conn,"11'11");
์ด๋ ๊ฒ mysqli_real_escape_string์ผ๋ก ๋ฎ์ด์ฃผ๊ณ , mysql๊ณผ ์ฐ๊ฒฐ์ ํด์ค ๋ค์ 11'11์ ์ ๋ ฅํ๋ฉด,
๋ฌธ์๋ก ์ถ๋ ฅ ๊ฐ๋ฅํ ์์๋ฐ์ดํ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ ์์๋ฐ์ดํ๊ฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉ์ด ์๋ ๋ฌธ์๋ก๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ฐ๊ฟ๋ณด๋๋ก ํ์.
$conn = mysqli_connect('localhost','root','momo0415');
mysqli_select_db($conn, 'opentutorials');
$name = mysqli_real_escape_string($conn,$_GET['name']);
$password = mysqli_real_escape_string($conn,$_GET['password']);
$sql = "SELECT * FROM user WHERE name='".$name."' AND password='".$password."'";
$result = mysqli_query($conn, $sql);
echo $sql;
๋ณ๊ฒฝ๋ ์ฝ๋๋ ์์ ๊ฐ๋ค.
name๊ณผ password๋ฅผ ์ ๋ ฅ๊ฐ ๊ทธ๋๋ก ์ฐพ๋ ๊ฒ์ด ์๋,
$name๋ณ์์ ๋ด์ ๋ ๋ชจ๋ ๊ฒ์ ๋ฌธ์๋ก ๋ณํ์ํจ ๋ค์ $name๋ณ์์ ๋ด๊ณ , $password ๋ํ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ ๋ค,
$sql์ ํตํด ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด ์๊น์ ๊ฐ์ด ' or '1=1์ ์ฌ์ฉํด๋ ๋ก๊ทธ์ธ์ ์คํจํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ถ์ฒ: [์ํ์ฝ๋ฉ]์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ
'๐ Web > ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ [์ธํฐ๋ท] (0) | 2022.09.25 |
---|---|
์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ [๋ผ์ด๋ธ๋ฌ๋ฆฌ] (0) | 2022.09.24 |
์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ [MySQL ์ค์ต] (0) | 2022.09.22 |
์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ [MySQL ์ด๋ก ] (0) | 2022.09.20 |
์น ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค๊ธฐ [PHP ์ค์ต] (0) | 2022.09.18 |