테스트 사이트 - 개발 중인 베타 버전입니다

register_form_update.php에서 에러가 발생했을때 뒤로 가기??? 채택완료

만수킴 5년 전 조회 2,584

https://sir.kr/g5_tip/8928

위 글에 팁을 올려주신 분과 같은 내용입니다.

 

회원가입의 순서 :

  1. register.php : 동의를 받죠.

  2. register_form.php : 회원에게 여러 정보를 입력받습니다.

  3. register_form_update.php : 회원에게 받은 정보를 검증하고 DB에 저장합니다.

 

회원가입 마지막 단계 즉 3단계에서 에러가 발생하여 얼럿창의 확인을 누르면

2단계로 가야 하는데, agree값이 없어서 "동의 안했으니 다시 1단계로 가라~"라는 얼럿이 뜨고

1단계로 돌아가버립니다...

 

사실 제일 좋은 방안은 (제 생각에...)

history.back이 수행되어 2단계에서 입력했던 내용이 그대로 있는 상태로 가면 좋겠는데...

걍 1단계로 가버리니...

사용자 입장에선 얼마나 짜증이 날까요?

 

대충 분석해보니...

URL이 없으면 histroy.back을 하는게 맞는것 같은 데...

어떤 보안 상의 이유인지... 이런 코드가 들어 있더라구요.

</p>

<div style="color: #000000;background-color: #ffffff;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;">
<div><span style="color: #001080;">$url</span><span style="color: #000000;"> = </span><span style="color: #795e26;">clean_xss_tags</span><span style="color: #000000;">(</span><span style="color: #001080;">$url</span><span style="color: #000000;">, </span><span style="color: #098658;">1</span><span style="color: #000000;">);</span></div>

<div><span style="color: #af00db;">if</span><span style="color: #000000;"> (!</span><span style="color: #001080;">$url</span><span style="color: #000000;">) </span><span style="color: #001080;">$url</span><span style="color: #000000;"> = </span><span style="color: #795e26;">clean_xss_tags</span><span style="color: #000000;">(</span><span style="color: #001080;">$_SERVER</span><span style="color: #000000;">[</span><span style="color: #a31515;">'HTTP_REFERER'</span><span style="color: #000000;">], </span><span style="color: #098658;">1</span><span style="color: #000000;">);</span></div>
 

<div><span style="color: #001080;">$url</span><span style="color: #000000;"> = </span><span style="color: #795e26;">preg_replace</span><span style="color: #000000;">(</span><span style="color: #811f3f;">"/[\<\>\'</span><span style="color: #ee0000;">\"\\</span><span style="color: #811f3f;">\'</span><span style="color: #ee0000;">\\\"</span><span style="color: #811f3f;">\(\)]/"</span><span style="color: #000000;">, </span><span style="color: #a31515;">""</span><span style="color: #000000;">, </span><span style="color: #001080;">$url</span><span style="color: #000000;">);</span></div>

<div><span style="color: #001080;">$url</span><span style="color: #000000;"> = </span><span style="color: #795e26;">preg_replace</span><span style="color: #000000;">(</span><span style="color: #811f3f;">'/</span><span style="color: #ee0000;">\r\n</span><span style="color: #811f3f;">|</span><span style="color: #ee0000;">\r</span><span style="color: #811f3f;">|</span><span style="color: #ee0000;">\n</span><span style="color: #811f3f;">|[^\x20-\x7e]/'</span><span style="color: #000000;">,</span><span style="color: #a31515;">''</span><span style="color: #000000;">, </span><span style="color: #001080;">$url</span><span style="color: #000000;">);</span></div>
 

<div><span style="color: #008000;">// url 체크</span></div>

<div><span style="color: #795e26;">check_url_host</span><span style="color: #000000;">(</span><span style="color: #001080;">$url</span><span style="color: #000000;">, </span><span style="color: #001080;">$msg</span><span style="color: #000000;">);</span></div>
</div>

<p>

제 생각에는 저 코드때문에 $url이 없더라도 REFERER URL이 강제로 들어가는 것 같은데...

 

질문은 2개에요.

1. alert.php를 어떻게 수정해야 다른 소스들에 영향을 주지 않고

  회원가입과 같은 로직에서 history.back()을 할 수 있을까요?

2. alert.php에 위 코드와 같은 로직이 추가된 이유가 너무 궁금합니다.

   (사실 그 이유를 몰라서 섣불리 수정하기가 무섭거든요~)

 

잘 부탁 드립니다.

감사합니다.

  

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트

agree값을 세션에 넣어서 떤지면 페이지가 이동해도 유지되지않을까요?

3단계회원가입일때 제가 사용했던 방식인데

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

만수킴
5년 전
오.. 굿 아이디어십니다~
2단계에서 agree값들을 세션에 넣어두고,
3단계에서 2단계로 돌아올때,
$_POST["agree"]를 체크하는 IF문 안에서
세션의 agree값을 한번 더 확인하면 1단계로 돌아가는것을 막을 수 있겠군요~

그런데...
한가지 아쉬운것은...
사용자가 입력했던 내용은 다 사라지는게 아쉽네요.
(브라우저별 특성에 따라 남아 있을 수 도 있는지 궁금하긴 하네요. 크롬은 안남더라구요.)
병원에서일해요
5년 전
번거롭지만 해당 값들도 세션에 담아서 뿌려주는 방법도 있습니다 ㅎㅎ
만수킴
5년 전
헉...
걍 얼럿만 히스토리 백 하면... 안될까요? ㅠㅠ
병원에서일해요
5년 전
alert을 띄우면 강제로 alert.php를 타기때문에
해당 페이지내에 분기변수를 만들어서 분기시키거나,,
alert을 안띄우고 모달로 경고를 띄운 후 페이지 히스토리백을 시키거나,,
생각하면 방법이야 나오겠지만 쉬운방법과 어려운방법중
선택하셔야될것같네요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인