SQL Injection


 SQL Injection이 무엇인가?에 대한 Posting입니다.

SQL Injection은 의도적으로 query문을 변형 또는 삽을 하면서 error를 일으키거나 특정 정보를 열람하거나, 조작을 하는 행위입니다.

어떤 식으로 공격을 가하는지는 SQL을 다뤄본 사람이라면 예상이 갈 것이다.
따라서 방어하는 방법에 대해서 설명을 하겠습니다.

SQL Injection 방어 - 입력 값 검증


1
2
/*, –, ‘, “, ?, #, (, ), ;, @, =, *, +, union, select, drop, update, from, where, join, substr, user_tables,
 user_table_columns, information_schema, sysobject, table_schema, declare, dual,…

 위와 같은 문자열들을 넣었을 때, 문제가 발생한다. 따라서 문자열에서 위와 같은 문자들이 나왔을 때, 공백을 없애기, 인코딩 등의 입력 값을 검증하는 방법들이 존재한다.

SQL Injection 방어 - 지정 프로시저의 사용


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function (callback) {// login 관련 callback   // 0
            if (sessionInfo != undefined) {
                var queryString = 'select * from member where no_member = ?';
                pool.query(queryString, sessionInfo.memberNumber, function (err, rows) {
                    if (err) return callback(err);
                    callback(null, rows[0]);
                });
            }else {
                callback(null);
            }
        }

 위는 제가 짠 node.js 코드의 일부로 query를 보면 "?"가 있을 것이다. ?와 맵핑되는 것은 sessionInfo.memberNumber라는 변수이다. 이런식으로 되어 있으면 공격이 들어왔을 때, node.js module에서 error를 낸다.


이 블로그의 인기 게시물

웹툰 무료로 볼 수 있는 사이트

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

BaekJoon 6591, 이항 쇼다운 조합문제