제목 | csrf 사용시 ajax를 한번이 아닌 여러번 호출할시의 질문입니다. | ||
---|---|---|---|
글쓴이 | 마카오최 | 작성시각 | 2016/03/29 22:15:45 |
|
|||
CI의 CSRF 기능은 참 쉽게 적용되어 좋네요. 적용하고 있는 과정중 생긴 질문입니다. 예를들어 최근게시물과 같은 형태의 리스트를 출력하고 이것을 more 버튼을 클릭하면 4개씩 클릭할때마다 추가되는 것을 ajax로 구현해놨습니다.
csrf 적용 옵션을 $config['csrf_regenerate'] = TRUE; 위와 같이 하여 폼 서브밋시마다 새로운 csrf값이 들어가게 되어있습니다.
그런데 more 버튼을 클릭시 기존 폼에 히든으로 있던 <input type="hidden" id="<?=$this->security->get_csrf_token_name()?>" name="<?= $this->security->get_csrf_token_name() ?>" value="<?= $this->security->get_csrf_hash()?>" /> 이 부분을 스크립트에서 ajax 요청 성공시 처리되는 부분에 다시 새로운 csrf 값으로 적용시키면 되겠지? 하고 ... $("#<?=$this->security->get_csrf_token_name()?>").val("<?=$this->security->get_csrf_hash()?>"); 이런식으로 구현했으나 아무값도 찍히지 않고 페이지가 새로고침 되어야만 새로운 값이 찍히는데... 페이지 새로고침 없이 뭔가 새롭게 csrf를 생성 하는 것이 있을것 같은데 없네요.. CORE를 확장해서 remake_hash_cookie() 와 같이 전용 메소드를 추가 구현해줘야 하는것인가요? 이것때문에 난생 처음으로 볼줄도 모르는 CORE를 살펴보게 되었습니다.. CORE에서 어떻게 생성되나 하고 살펴 보다가 또 다시 문득 생각 드는게 이런 경우를 나만 처리하려고 하는게 아닐텐데? 라는 의구심이 들더라구요..
csrf 옵션 중 csrf_regenerate 을 FALSE 로 처리하면 되겠지만 매번 같은 값이 보이는게 좀 찝찝하기도 하고요.. 보통 이렇게 리스트를 ajax로 계속적으로 추가 추가 해야하는 상황에서 csrf 적용을 어떻게 처리해야 하나요?
|
|||
다음글 | memcache save 사용시 row 활용에 대해 질... (1) | ||
이전글 | 고정형 My_pagination(ci 3.0) 적용시 ... (2) | ||
닉
/
2016/03/30 09:13:59 /
추천
0
|
닉
/
2016/03/30 09:45:09 /
추천
0
@마카오최 아.. 질문을 잘못 해석했네요 csrf_regenerate을 true로 유지하면서 ajax 요청 성공하고 다시 ajax요청을 하려는 건가요? 그래서 csrf를 생성하는거고요. 근대 위대로 하면 기존에 생성했던 csrf를 다시 사용하는 거라 csrf_regenerate=true설정과 맞지 않는거 같아요. |
닉
/
2016/03/30 09:47:12 /
추천
0
안해봐서 될지 안될지 모르겠지만 제 생각에는 ajax요청을 처음 한 부분에서 새로운 csrf 생성을 해서 반환한 후 ajax성공하는 콜백에서 이 값을 사용하면 되지 않을까 합니다.
|
마카오최
/
2016/03/30 11:04:02 /
추천
0
닉 님 답변 감사합니다. 그렇습니다. 제 질문이 ajax 성공하는 콜백에서 새로 생성된 해쉬값을 인풋에 다시 심어주는 과정 중에 그 해쉬값을 비동기 상태로 새로 생성하는 방법이 있나? 하고 여쭤보고 있는 것입니다. ㅠ 그 방법을 모르겠네요.. 분명 페이지 전체가 새로 불러들여와졌을때는 ci가 동작하면서 해쉬값을 새로 생성하는데 바로 이 생성부분... /system/core/security.php 내부에 생성 로직이 있긴 하는데 그 안에 일부 메소드를 그대로 호출해서 사용할수 있는 형태는 아닌것 같고, 아무래도 코어를 확장하는 형태로 가서 유효한 csrf를 새로 생성하는 메소드를 만드는 것이 옳은것인가? 잘 모르겠어서요..ㅠ 이렇게 되면 이것을 또 악용할수도 있겠구나 하는 생각도 들구요.. 어렵네요 ㅠ
현재는 그냥 csrf_regenerate=false 로 다시 셋팅해놓은 상태입니다...
|
@마카오최
http://www.ciboard.co.kr/user_guide/kr/libraries/security.html?highlight=csrf_regenerate#cross-site-request-forgery-csrf
csrf_regenerate 값을 false로 하시면 될듯요...