fix for Not-Alphabet URL

https://github.com/xpressengine/xe-core/issues/634

# Internet Explorer send punycode URL(ASCII) URL and non-alphabet
Unicode URL URL as a referer. 인터넷 익스플로러는 리퍼러 주소로 퓨니코드 주소와 유니코드 URL을 섞어
쓰고 있습니다. AJAX 통신에는 리퍼러로 Unicode를 사용하고 요청 호스트로는 퓨니코드 URL을 사용(이건 다국어 주소
형식으로 접속하려면 이렇게 했어야 할 것)합니다.
- XE strictly compare referer and server host for denying CSRF, but
punycode URL and Unicode URL should be dealt as a same one. 그런데 XE는 리퍼러의
호스트와 서버 호스트를 비교합니다. punycode로 쓰인 주소와 Unicode로 쓰인 주소는 같은 주소를 지시하더라도 문자열이
다릅니다. 같은 주소를 지칭하는 다른 문자열을 punycode로 변환해서 같은 주소라고 인식할 수 있게 수정했습니다.
- Fix checkCSRF function to deal both form as a same one.
- Convert Unicode URL input to punycode URL on the Admin Default URL
Settings. 관리자가 유니코드 형식으로 기본 주소를 입력하더라도, 퓨니코드로 변환해 저장하도록 했습니다. 퓨니코드로 저장하는
것이 여러모로 유용하기 때문입니다.
- For converting punycode URL, include IDNA coverting class. 퓨니코드와 유니코드
간 변환을 위해서 IDNA 변환 클래스(LGPL사용권)를 포함시켰습니다.
This commit is contained in:
MinSoo Kim 2015-01-01 01:35:32 +09:00
parent c3430d1c72
commit d2b05732ab
8 changed files with 4748 additions and 1 deletions

View file

@ -71,6 +71,12 @@ class installAdminController extends install
$default_url = Context::get('default_url');
if($default_url && strncasecmp('http://', $default_url, 7) !== 0 && strncasecmp('https://', $default_url, 8) !== 0) $default_url = 'http://'.$default_url;
if($default_url && substr($default_url, -1) !== '/') $default_url = $default_url.'/';
/* convert NON Alphabet URL to punycode URL - Alphabet URL will not be changed */
require_once(_XE_PATH_ . 'libs/idna_convert/idna_convert.class.php');
$IDN = new idna_convert(array('idn_version' => 2008));
$default_url = $IDN->encode($default_url);
$use_ssl = Context::get('use_ssl');
if(!$use_ssl) $use_ssl = 'none';