웹 페이지에서 로그인 기능을 구현하면서 평소 쓰던 것 처럼 쿼리문과 데이터 값을 문자열로 이어 붙여서 썼다. 그런데 이렇게 구현을 하면 악의적인 사용자가 ID와 패스워드 입력창에 정상적인 로그인 정보가 아니라 쿼리문을 입력함으로써 해킹을 할 수 있는 위험이 있다고 한다. 헛! 그런 방식으로 해킹이 가능하다는 것은 처음 알알았다. 고로 아래의 코드는 내가 작성한 아주 '위험'한 방식의 예시.
그래서 조언을 받아 새로 만든 로그인 기능이 아래와 같다. ( 현재 프로젝트의 DB서버가 Oracle이라 Oracle에 커넥션하는 부분을 따로 CS 파일로 만들어서 사용하고 있는 것이 OracleHelper 라서 아래의 코드를 누군가가 그대로 복사한다 해도 제대로 작동하지는 않을 것이다; ) 바뀐 점이라고 하면 텍스트박스에서 입력받은 값을 직접 쿼리에 + 연산으로 붙여넣는 것에서 파라매터를 이용하는 것으로 바뀌었다는 것이 큰 변화라 하겠다.
/// 해당 ID와 비밀번호로 로그인 가능 여부를 판단합니다.
/// </summary>
/// <param name="adminID">로그인 페이지에서 입력받은 관리자 아이디</param>
/// <param name="adminPW">로그인 페이지에서 입력받은 관리자 비밀번호</param>
/// <returns>DB에서 조회하여 로그인 가능이면 ture, 불가이면 false를 반환</returns>
public static bool Login (string adminID, string adminPW)
{
string sql = string.Empty;
sql = "Select count(*) From ADMIN WHERE ID=:adminID and PW=:adminPW";
using(OracleHelper oracle = new OracleHelper(ConfigurationManager.AppSettings["DB_SOURCE"], sql))
{
oracle.AddParameter(":adminID", adminID);
oracle.AddParameter(":adminPW", adminPW);
int count = int.Parse(oracle.ExecuteScalar().ToString());
if (count == 0)
return false;
else
return true;
}
}
파라매터를 쓰면 이렇게 보안상 좋은 점도 있을 뿐더러 미관상 보기에도 코드가 깔끔해지는 장점도 있다. 첫 번째의 좋지 않은 예와 같은 방식으로 쓰면 조건절에 들어가는 값이 늘어날수록 '(쿼테이션)과 ''(더블 쿼테이션)이 뒤섞여 난무하는 매우 보기 힘든 코드가 되어버린다. 하지만 파라매터를 쓰면 모든 조건값들을 라인별로 쭈욱 볼 수 있어 더욱 깔끔하다.
* MS-SQL 에서의 파라매터 --> @
DB가 무엇인지에 따라 위와 같이 파라매터를 의미하는 특수기호가 다르다는 것을 유념하여 코딩하면 훨씬 보기 좋은 코드를 만들 수 있을 것이다. ^^


0