본문 바로가기

교육/Php

Day 33 (Php + Oracle)

반응형

사용자 인증

암호는 문자열을 다른 사용자가 알아보지 못하게 치환 하는 방식이다. 암호를 복호화 할때 사용 하는 표를 난수표라고 한다. 해시코드도 문자열을 다른 사용자가 알아보지 못하게 치환 하는 방식으로 복호화가 불가능하다. 해시코드를 일방향 함수라고도 한다. 입력의 길이는 무제한이지만 출력의 길이는 일정하다. 이는 보안상 매우 위험한데 입력한 길이에 상관없이 출력이 일정하기 때문에 추측이 가능하고 우연히 같은 해시코드가 사용될 가능성이 있다. 하지만 발생 빈도수는 낮다. 이는 위협이 있는데 위험은 낮다고 할수있다.

해시코드 생성함수는 모든 랭귀지에 있지만 자신이 사용하는 프로그램만 사용해야 한다.

php에서 상태정보가 없다. 따라서 다른 페이지로 이동시 상태유지가 되지 않는다. 이를 해결하기 위해서는 세션 변수에 값을 저장한 후 login을 반복해야 한다. 주의할점은 get방식으로 사용하면 url에 저장 값이 표시되므로 사용할 수 없다.

세션은 get방식으로 전달된 데이터 값을 계속 전달하는 방식이다. 프로그램이 넘어가면 데이터가 릴리즈 되기 때문에 다른위치에 저장한다. 비슷한 방식으로 쿠키가 있다. 쿠키와 세션의 차이는 쿠키는 client의 browser에 session값을 저장하고, 세션은 server의 HW에 session값을 저장한다.

 

session_start();는 파일의 맨 앞에 사용한다. $_SESSION["첨자"]와 같은 변수는 predifine 변수로서 프로그램에서 사용하는 예약 변수이다.

session_start();로 시작한 세션은 session_destroy();가 될 때 까지 세션에 저장한 값이 유지된다. 

 

url을 보면 우타로 인한 에러임을 확인 가능하다.
a.php에서 b.php로 이동시 세션값
a.php에서 c.php로 이동한 화면
세션 값은 나중에 입력된 값으로 저장되고 유지 된다.

 

인증에서 사용하는 id는 identification 으로 구별에 관한 주장이고 password는ocentification으로 인증에 관한 주장이다. id와password를 합쳐 I&A라고 한다.

 

id.html,id.php는 계정 등록에 관한 프로그램이고, check.html,check.php는 인증을 확인하는 프로그램이다.

로그인 한 출력페이지와 로그인 하지 않은 출력페이지가 다르게 출력되는 인터페이스를 제한된 인터페이스라고 한다.

DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2)는 DBMS_CRYPTO패키지안에 Hash 함수를 MD5 해시코드 알고리즘을 이용해서 사용하겠다는 내용이다.

 

$conn을 종료하기전 $row_num을 사용 하지 않으면 데이터가 정상적으로 출력되지 않는다.

 

실습 1 계정을 생성하고, 인증을 실행하는 프로그램을 작성한다.

더보기
로그인 시도시 (좌)는  실제 로그인이 되었음에도 로그인이 되지 않은 화면이 출력되고 (우)는 정상 로그인 화면이 출력된다. 
계정 생성 화면
중복된 계정이 입력되면 에러메시지가 발생한다
사용자 인증 페이지
사용자 인증이 제대로 작동하지 않는다면 인증하지 않은 mainpage가 출력된다.

 

 

00904 에러 발생 - DBMS_CRYPTO.Hash가 존재 하지 않는 식별자 라고 하면 서버의 권한이 있는지 먼저 확인하자

권한이 부족하면 package를 사용할 수 없어 사용이 불가능하다.

 

해결해야 할점은 로그인 전에 del이 나오지 않게 하는 것과 DBMS_CRYPTO.Hash(to_clob(to_char('$passwd')),2)를 사용하면, 함수의 문제점은 중복된 패스워드에 같은 해시코드가 발생한다는 점, URL접속시 로그인 없이 사용하지 못하게 하는 것이다. 로그인 전에 del이 출력되지 않게 하는 것은 로그인 했을때 $ID값이 null이 아님을 이용한다. 데이터를 추가하는 것을 솔트라고 하는데 해시코드를 생성하는 함수의 변수를 to_char('$id'||'$passwd')로 변경 한다. URL접속시 로그인 없이 사용하지 못하게 하는 것은 각 파일마다 인증 파일을 적용시키면 된다.

더보기
(좌)인증을 거치지 않으면 데이터를 삭제할 수 없다. (우)인증을 하게 되면 데이터를 삭제할 수 있는 버튼이 생성된다.
제대로 변수를 넣어주었음에도 에러가 발생했다. 1시간쯤 후에 갑자기 정상 작동을 했다.

 

$passwd = md5($passwd); : php용 해시코드 => 개발툴 변경이 불가능 // php용 해시코드이기 때문에 php에서만 사용가능 // DB를 사용하지 않는 다면 사용해도 상관없지만 DB를 사용하려면 절대 하면 안된다.

우리가 사용한 프로그램에서는 $passwd가 무조건 우리가 입력한 값이었지만 md5는 $passwd가 해시코드일때도 우리가 입력한 값일때도 있다.

반응형

'교육 > Php' 카테고리의 다른 글

Day 38 (Php)  (0) 2020.01.12
Day 32(Php + Oracle)  (0) 2020.01.02
Day 31 (php + DB)  (0) 2019.12.31
Day 30 ( php + Oracle)  (0) 2019.12.30
Day 30 (php)  (0) 2019.12.30