ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

PHP

php sql injection ๋ณด์•ˆ

๐Ÿฉท ์Šˆ ๐Ÿงก 2015. 2. 10. 00:03
728x90
SMALL

php sql ์ธ์ ์…˜ ์˜ˆ๋ฐฉ


- magic_quote_gpc


Sets the magic_quotes state for GPC (Get/Post/Cookie) operations. When magic_quotes are on, all ' (single-quote), " (double quote), \ (backslash) and NUL's are escaped with a backslash automatically.


์ด๊ฒƒ์€ ์ž๋™์œผ๋กœ addslashes() ๋ฅผ ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ sql ๋ฌธ๋ฒ•์— ์™„์ „ํžˆ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  \ ๋กœ escape ํ•˜๋Š” ๋ฌธ๋ฒ•์„ ์ง€์›ํ•ด ์ฃผ๊ธด ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์›๋ž˜์˜ ๋ฌธ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ; ๋Š” escape ์‹œํ‚ค์ง€ ์•Š์œผ๋‹ˆ ์‚ฌ์†Œํ•œ ์‹ค์ˆ˜๋กœ ํฐ ๋ณด์•ˆ๊ตฌ๋ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


- *_escape_string()


๊ฐ sql ๋ณ„๋กœ escape_string() ์ด๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

mysql_escape_string('๋ฌธ์ž์—ด') ๋กœ mysql ์— ๋งž๋Š” escape ๋œ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ sql ์˜ ๋ฌธ๋ฒ•์€ ๋ฌธ์ž์—ด์„ ์ž‘์€๋”ฐ์˜ดํ‘œ(') ๋กœ ๋ฌถ๊ณ , ์ž‘์€๋”ฐ์˜ดํ‘œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๊ฒƒ์€ ์ž‘์€๋”ฐ์˜ดํ‘œ 2๋ฒˆ ์ž…๋‹ˆ๋‹ค.('')

์ด๊ฒƒ '์ฐธ' ์ข‹๊ตฐ ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ escape ์‹œํ‚จ๋‹ค๋ฉด

์ด๊ฒƒ ''์ฐธ'' ์ข‹๊ตฐ ์ด ๋˜๊ณ 

query('INSERT INTO table VALUES (\'์ด๊ฒƒ \'\'์ฐธ\'\' ์ข‹๊ตฐ\');') ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต์€ post ๋ฐ›์€ ๋ฌธ์ž์—ด์„ db ์— ๋„ฃ์„ ๊ฒƒ์ด๋ฏ€๋กœ

$_POST = array_map('mysql_escape_string', $_POST); ๋กœ ํ•œ๋ฒˆ์— escape ์‹œํ‚ค๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ๊ฒƒ์€ select ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์‹œ escape ์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

result ๋Š” escape ๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด ์ž…๋‹ˆ๋‹ค.


- prepared query


์ข€๋” ์•ˆ์ „ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ prepared query ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

INSERT INTO table (a, b) VALUES (:a, :b) ๋ผ๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ prepare (์ปดํŒŒ์ผ?) ์‹œํ‚ต๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ธ์ ์…˜์ด ์ผ์–ด๋‚  ๋ฌธ์ž์—ด์ด ์•„์˜ˆ ํฌํ•จ๋˜์ง€ ์•Š์€์ฑ„ prepare ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ prepare ๋œ ์ฟผ๋ฆฌ์— ๋ฌธ์ž์—ด์„ bind ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

bind ๋‹จ๊ณ„์—์„œ๋Š” ํŒŒ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ escape ์‹œํ‚ค์ง€ ์•Š์•„๋„ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.


mysqli, pg ๋“ฑ์ด ์ œ๊ณตํ•˜๊ณ , PDO ๋ฅผ ์ด์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$db = new PDO(์ ‘์†);

$stmt = $db->prepare('INSERT INTO table (a, b) VALUES (:a, :b)');

$fields[':a'] = '\'; DELETE FROM table;\';

$fields[':b'] = '\'; DELETE FROM table;\';

$stmt->execute($fields);

bind ๊ฐ’์ธ :a, :b ๋Š” ๋ฌธ์ž์—ด์ด๋“  ์ˆ˜์ด๋“  ๋”ฐ์˜ดํ‘œ๋ฅผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์ œ ์™ธ์— bindParam() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ & ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ๋ณ€์ˆ˜์— ๊ฐ’๋งŒ ์ฑ„์šฐ๊ณ  execute() ํ•˜๋ฉด ๋˜๋Š” ๋ฐฉ์‹๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


์–ด๋–ป๊ฒŒ ๋šซ์„ ์ˆ˜ ์žˆ์ง€? ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋šซ์„ ์ˆ˜ ์—†์–ด. ๊ทธ๋Ÿฌ๋‹ˆ ๊ท€์ฐฎ๊ฒŒ escape ์•ˆ์‹œ์ผœ๋„ ๋ผ.


์˜ค๋งŒ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์˜ ์ƒ๊ฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ๋šซ๋ฆฐ ํ›„์—๋Š” ๋Šฆ์Šต๋‹ˆ๋‹ค.

escape ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ธฐ๋ณธ ์˜ˆ์ ˆ ์ž…๋‹ˆ๋‹ค.



์ถœ์ฒ˜ : http://phpschool.com

728x90
LIST
๋Œ“๊ธ€
it,์Šˆ2008/2/14 Start...
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ
250x250