기

5.0.25 모든 메일주소가 사용금지되어 버림

· 2014-12-17 (수) 19:52:18 · 897 · 4
참고: http://sir.co.kr/qa/?wr_id=52269&s_tag=%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C5


5.0.25 업데이트 후 메일주소 검사할 때 모든 도메인이 사용할 수 없게 되어 버립니다.


원인:

settype 함수는 오류가 발생하지 않는 이상 항상 참을 반환하므로, 아래의 조건식도 항상 참이 됩니다.

if (strtolower(settype($domain, "string")) == strtolower(settype($email_domains[$i], "string")))
return "$domain 메일은 사용할 수 없습니다.";

따라서 도메인이 무엇이든 상관없이, 항상 메일을 사용할 수 없다는 에러가 나옵니다.


해결책:

금지도메인 검색 함수를 아래와 같이 바꿔주시면 됩니다. strtolower 처리도 한꺼번에 가능합니다.

function prohibit_mb_email($reg_mb_email)
{
global $config;
list($id, $domain) = explode("@", strtolower($reg_mb_email));
$email_domains = explode("\n", trim(strtolower($config['cf_prohibit_email'])));
if (in_array($domain, $email_domains, true))
return "$domain 메일은 사용할 수 없습니다.";
return "";
}

※ $domain과 $email_domains는 explode() 함수의 결과이므로 모두 문자열입니다.

※ in_array() 함수 사용시 3번째 인자를 true로 해주면 자료형까지 검사하므로 숫자도메인 문제가 발생하지 않습니다.
|

댓글 4개

제안해주신 코드로 테스트 계정에서 아래와 같이 코드를 작성해보니 제대로 체크가 되지 않고 있습니다.

[code]
<?php
include_once('./_common.php');

$reg_mb_email = '[email protected]';

list($id, $domain) = explode("@", $reg_mb_email);
$email_domains = explode("\n", trim($config['cf_prohibit_email']));

print_r2($email_domains);

for($i=0; $i<count($email_domains); $i++) {
if (in_array($domain, $email_domains, true))
echo "$domain 메일은 사용할 수 없습니다.";
}
?>
[/code]

또한 in_array의 경우 대소문자를 구분하기 때문에 오류 해결 코드로는 적합하지 않다고 생각됩니다.
stripos 를 사용하는 코드로 대체하는 것이 더 적합한 해결책이 아닌가 싶습니다.
음... 작성하신 코드는 대소문자 구분이 안되는 게 당연합니다.
위에서 제가 제안한 코드는 explode()하기 전에 strtolower()를 미리 해주었거든요.
또한, 저는 for문 안에서 in_array()를 하지 않고, 아예 for문을 제거했습니다.
혹시 이렇게 해도 안된다면 편리님이 보시기에 가장 좋은 방법으로 해주시기 바랍니다.
문자열 비교니까 == 대신 === 를 쓰는 것도 해결책이 될 수 있겠네요.
DB에 따라 개행문자로 \r 추가되어 제대로 체크가 되지 않았습니다.
아래처럼 코드를 수정했습니다.
https://github.com/gnuboard/gnuboard5/commit/d5db75a4c94969376d8619491b32c8e4dedec2b8
아, \r이 문제였군요. 정규식으로 처리해도 되겠지만, 이렇게 간단한 건 역시 array_map()이 짱입니다 ^^
빠른 조치 감사합니다.
댓글을 작성하시려면 로그인이 필요합니다.

버그신고

4,191건

  문의게시판을 이용해 주세요 :) https://sir.kr/co_qa  

+
분류 제목 글쓴이 날짜
15-01-14
15-01-12
15-01-08
15-01-07
15-01-07
15-01-06
15-01-02
14-12-29
14-12-29
14-12-19
14-12-17
14-12-16
14-12-16
14-12-15
14-12-10
14-12-08
14-12-08
14-12-04
14-12-04
14-12-02