CI 묻고 답하기

제목 나쁜 $_POST 값이 들어온 경우
글쓴이 밥아저씨 작성시각 2012/06/13 08:35:05
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 18558   RSS
 -.- 생각하지 못한 부분이 있네요...
Config에서 Form Validation을 설정 해뒀는데요.
검사를 통과 하더라도 이 외의 값이 들어왔을경우 해당
$_POST를 모두 Mysql 에 update 시키면 악용 가능 하다는 부분 인데요

예를들어 POST 값에는 'password' 만 들어 와야 하는데
사용자가 임의로 'id' 라는 input을 만들어 넣고 전송 시키면
테이블에 해당 id 칼럼의 값이 변경되어 버리죠...

현재는 저만의 라이브러리에 해당 $_POST  array와
칼럼명 어레이 (반드시 받아야 할 칼럼 명들을 array('id', 'password', 'job') 을 넘겨서
foreach 문으로 원하지 않는 값은 unset 시켜주고 있는데요,

제 머리보다는 컴퓨터를 믿어보고자 좀더 편하게
FormValidation단에서 처리할 방법이 없을지 궁금합니다.
 다음글 Prepared Statements에 대한 궁금한사항입... (7)
 이전글 CI에서의 Crontab 명령어 사용해서 php 실행하... (3)

댓글

한대승(불의회상) / 2012/06/13 09:20:32 / 추천 0
DB 컬럼 값을 POST 를 통해서 전송 받는다는 말씀이시죠.
foreach 문을 통하여 걸러 내는것이 현재로서는 제일 좋은 방법 같아 보입니다.
배강민 / 2012/06/13 09:40:57 / 추천 0
저 같은 경우에는

http://sample.cikorea.net/sample_view/class/form_validation 

와 같이 form 체크 후의 값인  set_value  를 이용해서 해당 값을 이용합니다.

$_POST를 직접 사용하진 않습니다. 이걸 직접 사용하면 form_validation 으로 필터링 된 값과는 따로 놀게되서요..

전 이렇게하고 있는데.. 문의 주신게 이게 맞는지 잘 모르겠네요..ㅋ
밥아저씨 / 2012/06/13 09:55:54 / 추천 0
불의회상// 칼럼명을 받는다기 보다는, input 값의 name 이 db의 칼럼명이 됩니다.
(액티브 데이터베이스에서 말이죠...)

KangMin // set_value는 처음 알았네요. 그런데 제가 질문한 문제점을 제외하면
form_validation 으로 성공을 했으면 그냥 $_POST 으로 사용해도 되지 않나요?
form_validation 으로 인하여 따로 값이 변경되거나 그렇지는 않기 때문에
xss_clean 등을 모두 거쳤으면 구지 상관은 없지 않을까욥?..
다시 정리 하자면

password 필드 값을 넘겼는데
form_validation == true 상황을 가정 했을때
이 값을 데이터 베이스에 넣는경우

1... $this->form_validation->set_value('password');
2... $this->input->post('password');
3... $_POST['password'];

이 셋중 어느것을 써도 상관없지 않나요? 하는 질문입니다.
배강민 / 2012/06/13 10:28:09 / 추천 0
헙.. 제가 잘못 알고 있었네요..

1,2,3 다 똑같네요... 아이고.. 혼란을 드려서 죄송합니다.
한대승(불의회상) / 2012/06/13 10:38:49 / 추천 0
컬럼명이 많거나 하면 귀차니즘 때문에 저도 그렇게 합니다.

값을 가져올때  $_POST 보다  $this->input->post() 를 사용 합니다.
form_validation 은 value에 설정된 값을 기준으로 점검만 할 뿐이고 값을 직접 변경하거나 하는 작업은 하지 않습니다.

그래서 밥아저씨님이 현재 쓰고 계시는 방법이 가장 적절하다고 생각 합니다.

밥아저씨 / 2012/06/13 11:11:46 / 추천 0
 KangMin, 불의회상 님 // 감사합니다. 저도 더 많이 배워갑니다. (__)