SQL Injection

박기덕·2025년 3월 12일
0

납품때에는 미처 생각 못했었는데 로그인에 관련 하여

sql = "SELECT * FROM USER WHERE userid =’" + body.userId + " AND passwd =’" + body.passwd + "'";

이런식으로 바로 쿼리문을 생성했다. 다 내부 네트워크 라서 넘어갔지만 실제로는
Sql Injection 에 문제되는 코드 였다.

문제점]

공격자가 userid에 'OR '1' = '1'; -- 것을 넣으면 뒤에 것은 무시되어 select 에 데이터가 있게 된다.

; DROP TABLE ; 같은 위험한 쿼리문도 실행가능하게 된다.

해결책 현장에서는 prepare statement라는 것을 사용한다.

ex)
var sql = 'INSERT INTO board_db.t_user ' +
'(login_id, login_pwd, user_name, email) ' +
'VALUES (?,?,?,?)';
var values = [req.body.login_id, req.body.login_pwd,
req.body.user_name, req.body.email];

connection.query(sql, values, function(err, row, field) {
if(err) {
console.log(err);
res.json({'status':'ERROR'});
} else {
res.json({'status':'OK'});
}
});

profile
언리얼 개발자

0개의 댓글

관련 채용 정보