Etc

SQL Injection

μ½”λ“œ μΈμ μ…˜μ˜ ν•œ κΈ°λ²•μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μž…λ ₯값을 μ‘°μž‘ν•˜μ—¬ μ„œλ²„μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ³΅κ²©ν•˜λŠ” 방식을 λ§ν•œλ‹€.

λ°©μ–΄ 방법

  • κΆŒν•œμœΌλ‘œ μ œν•œν•˜λŠ” 방법
    • Query String 을 싀행을 κΆŒν•œμ— 따라 μ œν•œν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • μž…λ ₯κ°’ 검증
    • μ •κ·œμ‹ ν˜Ήμ€ μœ νš¨κ°’μ˜ vaildation 확인을 ν•œλ‹€.
    • 특수문자 ν˜Ήμ€ SQL μ˜ˆμ•½μ–΄ 등을 κ²€μ¦ν•˜μ—¬ μ°¨λ‹¨ν•œλ‹€.
  • μ΅œμ†Œ κΆŒν•œ μœ μ €λ‘œ DB λͺ…λ Ή μ œν•œ

κ°„λ‹¨νžˆ μœ„μ™€ κ°™μœΌλ©° λŒ€ν‘œμ μœΌλ‘œλŠ” μ €μž₯ ν”„λ‘œμ‹œμ €λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 μžˆλ‹€.

Prepared Statement (μ €μž₯ ν”„λ‘œμ‹œμ €) μ‚¬μš©

ν˜„μ‘΄ν•˜λŠ” κ°€μž₯ 쒋은 λ°©λ²•μœΌλ‘œ μ‚¬μš©μ „μ— 일뢀 컴파일 λ˜μ–΄ μ‹€ν–‰λœλ‹€.
Query 에 미리 ν˜•μ‹μ„ μ§€μ •ν•˜λŠ” κ²ƒμœΌλ‘œ μ§€μ •λœ ν˜•μ‹μ˜ Query ν˜•μ‹μ΄ μ•„λ‹ˆλ©΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

try{
  String uId = "admin";
  String query = "SELECT * FROM user_info WHERE uId= ?"

  stmt = conn.prepareStatement(query);
  stmt.setString(1, uId);

  ResultSet rs = stmt.executeQuery();
  while(rs.netxt()) {
    /* statement */
  }
} catch () {
  /* statement */
} finally {
  /* statement */
}

참고자료

http://blog.plura.io/?p=6056

샀딩 (Sharding)

같은 ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆλ₯Ό 가진 데이터λ₯Ό λ‹€μˆ˜μ˜ 데이터 λ² μ΄μŠ€μ— λΆ„μ‚°ν•˜μ—¬ μ €μž₯ν•˜λŠ” 방법을 의미