MapleStory Finger Point

๐ŸŸค JAVA/๐ŸŸค JSP

[JSP] JDBC statement, prepareStatement (SQL ์ธ์ ์…˜)

HYEJU01 2024. 8. 24. 17:55

SQL ์ฟผ๋ฆฌ ์‹คํ–‰ ๋ฐฉ์‹

  • Statement:
    • ์ผ๋ฐ˜์ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • SQL ์ฟผ๋ฆฌ๋Š” ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๊ณ  ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.
    • ์ฟผ๋ฆฌ ๋‚ด์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ SQL ๋ฌธ์— ๊ฐ’์„ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
     
    Statement stmt = connection.createStatement(); String sql = "SELECT * FROM users WHERE id = " + userId; ResultSet rs = stmt.executeQuery(sql);
  • PreparedStatement:
    • ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ SQL ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ?๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚˜์ค‘์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
     
    String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, userId); ResultSet rs = pstmt.executeQuery();

2. ์„ฑ๋Šฅ

  • Statement:
    • ๋งค๋ฒˆ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค SQL ๊ตฌ๋ฌธ์ด ์ƒˆ๋กญ๊ฒŒ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ, ๋™์ผํ•œ ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PreparedStatement:
    • ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ํ•œ ๋ฒˆ ์ปดํŒŒ์ผ๋˜๊ณ , ์ดํ›„ ์‹คํ–‰ ์‹œ์—๋Š” ์ปดํŒŒ์ผ๋œ ์ฟผ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ์ด์ ์„ ๋” ํฌ๊ฒŒ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. SQL ์ธ์ ์…˜ ๋ฐฉ์ง€

  • Statement:
    • ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด SQL ์ฟผ๋ฆฌ์— ์ง์ ‘ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ userId์— ' OR '1'='1 ๊ฐ™์€ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PreparedStatement:
    • SQL ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋˜๋ฏ€๋กœ, SQL ์ธ์ ์…˜ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž…๋ ฅ ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ ์ ˆํ•˜๊ฒŒ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋˜์–ด ์ฟผ๋ฆฌ์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

4. ์œ ์—ฐ์„ฑ

  • Statement:
    • ๋‹จ์ˆœํ•œ ์ฟผ๋ฆฌ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.
    • ๋‹ค๋งŒ, ๋™์ ์ธ ์ฟผ๋ฆฌ๋‚˜ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PreparedStatement:
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฟผ๋ฆฌ๋‚˜, ๋™์ ์ธ ์ฟผ๋ฆฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
 

SQL ์ธ์ ์…˜ (SQL Injection)

SQL ์ธ์ ์…˜์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•…์˜์ ์ธ SQL ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๋Š” ๋ณด์•ˆ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์ ์ ˆํžˆ ๊ฒ€์ฆ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ฟผ๋ฆฌ์— ์ง์ ‘ ํฌํ•จ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.