제2의 비엔지니어 인생관을 꿈꾸며

Posted
Filed under Study

웹 문서 인코딩의 시련
웹 개발에  있어 인코딩의 문제는, 아직도  헛갈리거나,  그때그때? 구글링을 통해서 해결 하곤 한다.
(그리고 또 다시 문제에 봉착하면, 또 다시 구글링을 통해 해결한다.  본인이 그렇타 ㅠ)

웹은 '페이지' 이고 '문서' 이다.  문서 한 페이지 한 페이지 마다,  페이지 속성에서 언어설정이 가능하다. 유니코드가 표준화(?) 되면서, 기존에 euc-kr 을 고수하던 페이지들은 유니코드로 많이 변경되었다. 나름  유니코드로 자리잡아가는 과도기가 끝을 지나고 있기는 하다. 하지만,  아직도 업무적으로 또는 기존 솔루션의 유지,  PG사 리턴값 , 서드파티 업체에서는 제공되는 API 나 서브밋 페이지들에서 넘어오는  정보들이 인코딩(특히 한글)이
 맞지 않아  깨진 문자들때문에 고생했던 경험들이 한 두번씩 있으리라 생각된다.

그래서 이번기회에 완전히 이해하고 넘어 가고자 정리했다. (찾아보고, 정리하면서 본인도 공부가 되어 좋다.)


웹에서 전달되는 인코딩의 종류
웹 페이지는 특성한 클라이언트 페이지에서 서버로 전달하는 구조를 가지고있다. 그게 아작스건 일반 웹폼이던 뭐든  기본구조이다. 그래서 인코딩은 크게 클라이언트 인코딩 / 서버인코딩으로 나눌 수 있다.  이미 알고있는 이야기이지만, 클라이언트 단은 javascript  , 서버단은 asp , asp.net jsp , php 기타 등의 서버 페이지들 이다. 클라이언트에서 전달된 text 정보들이 서버단으로 넘어가면서 서로 다른 인코딩 페이지로 구성되어 있다면 깨지기 마련이다. 그래서 항상 그렇게 이야기를  많이한다. "Url 인코딩" 또는 "인코딩" 해너 넘겨주세요.

ㆍJavascript(클라이언트) Encode/Decoding


javascript 에서의 3가지 인코딩 함수가 있다.

(아래설명에 있지만 escape는 더 이상  사용하지 않는 함수로 구분되어있다.)

- escape (
unescape)
- encodeURI(decodeURI)
- encodeURIComponent(≠decodeURIComponent)

참고로 테스트 문자열은 영/숫/한글 혼영 + 특수문자 + URL 문자열로 일부 넣어봤다. (아래참조)
테스트 문자열 "test__@__$__#__&__/__?__;__=__\__1234_한글"

뒤에서 따로 디인코딩을 해보겟지만 (≠unescape) 이런식으로 디코딩 함수를 표기해 두었었으니 참고하자. 복잡한건없다. 아래코드를 작성하여 실행해보자.

<!DOCTYPE Html>
<html>
<body>
 
<script language="javascript">
 
      var str = "test__@__$__#__&__\__/__1234_한글";
  
      document.write("<B>원본 : </B>" + str );
      document.write("<BR><BR><BR>");
      document.write("<B>escape :</B> " + escape(str)); 
      document.write("<BR><BR><BR>");
      document.write("<B>encodeURI :</B> " +encodeURI(str));
      document.write("<BR><BR><BR>");
      document.write("<B>encodeURIComponent : </B>" + encodeURIComponent(str));
 
 </script>
</body>
</html>


[결과]
사용자 삽입 이미지

먼저 "__" 언더바 2개로 문자를 각각 구분하였다.(언더바는 영문자와 같이, 인코딩이 따로 되지않아서, 데이터를 육안으로 구분하기 쉽게 하게 위해넣었다.


● escape 와 encdoeURI (encodeURIComponent) 

크게보면 두 가지의 경우  인코딩 방식이 다르다. 
첨언하자면, escape는 더 이상 표준(?)함수가 아닌, 하위호환성을 위해 유지되고있는 함수일뿐이므로, 사라질 수도있으니 encodeURI 관련 함수를 이용하도록 하자

escape는 유니코드 인코딩 방식이고 , 
encodeURI (encodeURIComponent) URI 인코딩 방식이다.

1234 숫자뒤에 한글이인코딩된것을 보면 알수있다. escape 의경우  한글과 일부 특수문자들을 인코딩 하는것을  알 수 있다. 영문, 일부특수문자 , 숫자등 모두 인코딩 하지않는다. 그대로 전송한다. 자세히 히보면  $ 나 # 의 1byte 문자의경우 %23 한글처럼 2byte의 경우 한 %uD55C 로 인코딩되는 것을 알수있다.
(ASCII 코드를 유니코드로 인코딩 한다.)


encdoeURI 와 encodeURIComponent 경우 한글을 인코딩하는 방식은 같으나. encdoeURI 는 URL 에 사용되는 몇가지 특수문자(아래참조) 를 제외하고 인코딩 되며, encodeURIComponent 는 그것을 포함한 문자들을
인코딩 한다.
구분 인코딩 안되는 문자
encodeURI
      ; , / ? : @ & = + $ – _ . ! ~ * ‘ ( ) # a-z 0-9
encodeURIComponet

 – _ . ! ~ * ‘ ( ) a-z 0-9

솔직히 저런거 외우는사람 몇이나 될까? 그냥 URL 쿼리 전송시 사용되는 
.aspx?a=1&b=c&#aaa  에서 ?,&,# 등이 인코딩 안되는건 encodeURI 모두 인코딩되는건 encodeURIComponent 라고 생각하면 간편하다. :)

여담으로,  회원가입/로그인시  Ajax(UTF-8) 처리로 인해 서브밋(EUC-KR) 페이지 인코딩이 맞지 않는다면 encodeURIComponent 로 인코딩하는것이 좋다. 패스워드에는 특수문자를 이용할 확률이 높기때문이다.
encodeURI를 사용 할 경우 몇몇의 특수문자들은  웹서버가 인코딩하기때문에 원하지 않는 문자열이 저장된다.


 ㆍAsp , Asp.net (서버) Encode/Decoding


ASP 와 ASP.Net 은 또다른 인코딩 방식으로 출력값을 리턴한다.
ASP 의 경우 javascript 인코딩된 (위의 3가지) 값들을 디코딩하는 함수가(내장함수) 사실없다. 만들어써야한다. 대신 runat="server" 로 javascript 함수를 그대로 쓸수있다.


ㆍ먼저 ASP.Net을 살펴보자.
(화면이 깨지는관계로 이미지로 대체했고, 소스는 다운받게해두었다.)
사용자 삽입 이미지
asp.net 인코디/디코딩 소스

 

(일단 주석은 무시하고 인코딩만 해보자)


[ Asp.net 결과 ]
사용자 삽입 이미지







javascript 결과와 다른방식으로 인코딩한다.


ㆍ ASP(classic ASP) 방식을 살펴
<% Response.Write(server.urlencode("test__@__$__#__&__/__?__;__=__\__1234_한글")) %>



[ classic ASP 결과]
사용자 삽입 이미지




 

서버측에서 인코딩된 문자열을 클라이언트측에서 디코딩할수 있는 함수는없다(내장함수로는안된다)
단 클라이언트 측에서 인코딩된 문자열을 서버측에서는 가능한다.
ASP.Net 의 경우 HttpUtility.UrlDecode 함수 하나면 unescape  / decodeURI / decodeURIComponent 를 모두 대체가 가능하다. classic ASP 의 경우 ruat=server 속성을 이용해
자바스크립함수를 서버함수로 따로 각각 3개다 모두 만들어줘야한다.

ㆍ마지막으로 classic ASP 와 ASP.Net 의 디코딩 화면을 확인하면서 마치기로 하자

 Asp.net 에서 HttpUtility.UrlDecode함수의 활용

사용자 삽입 이미지
(위에 asp.net 소스를 다운받아 주석을 풀면 디코딩이 된다.)

[ 결과 ]
사용자 삽입 이미지










javascript 으로 인코딩된 3가지 값들이 함수 1가지로 모두 디코딩 되는것을 볼 수 있다.




ㆍ ASP(classic ASP) 방식을 살펴보자 
    Classic ASP 에서는 Runat=server 를 활용하여 javascript  함수를 서버용으로 만들어줘야한다.
 <%
      <script language="javascript" runat="server">
             function  asp_unescape(s) {    return unescape(s);  }
             function  asp_decodeURI(s) {    return decodeURI(s);  }
             function  asp_decodeURIComponent(s) {    return decodeURIComponent(s);  }
      </script>
      <%
         Response.write("asp_unescape" & _
                                    asp_unescape("test__@__%24__%23__%26__/__%3F__%3B__%3D____1234_%uD55C%uAE00") &  _
                                    "<BR><BR>")
         Response.write("asp_decodeURI" & _
                                    asp_decodeURI("test__@__$__#__&__/__?__;__=____1234_%ED%95%9C%EA%B8%80") & _
                                    "<BR>
 <BR>")
        Response.write("asp_decodeURIComponent" & _
                                       asp_decodeURIComponent("test__%40__%24__%23__%26__%2F__%3F__%3B__%3D____" & _      
                                      "1234_%ED%95%9C%EA%B8%80")& "<BR><BR>")

%>

<결과>
사용자 삽입 이미지
  runat 서버로 추가된 javascript 함수들이 asp 내에서 정상적으로 작동하는것을 볼수있다

2018/11/30 10:47 2018/11/30 10:47
Posted
Filed under Study


Symptoms

When configuring the VMware High Availability (HA) in vCenter Server, you see the message:

Host <xxx> currently has no management network redundancy
 Purpose
To prevent the Host <xxx> currently has no management network redundancy message when configuring the VMware High Availability (HA) in vCenter Server, VMware recommends to add a second vmnic to the service console or management network vSwitch configured with NIC teaming, and that you keep both as active adapters, or place one in standby.
 Cause
This message is displayed if the network redundancy configuration within theService Console/VMkernel Port Management Network is incorrect. This message can be safely ignored.

 Resolution
To prevent this message from appearing, and to comply with proper network redundancy, VMware recommends to add a second vmnic to the service console or management network vSwitch configured with NIC teaming, and that you keep both as active adapters, or place one in standby. For more information, see NIC teaming in ESXi and ESX (1004088).

Alternatively, you can add a second service console on a different vSwitch and subnet.<o></o> To suppress this message on ESXi and ESX hosts in the VMware High Availability (HA) cluster, or if the warning appears for a host already configured in a cluster, set the VMware HA advanced option das.ignoreRedundantNetWarning to true and reconfigure VMware HA on that host. This advanced option is available in VMware Virtual Center 2.5 Update 3 and later.

If the warning appears even when there are two available uplinks for the vSwitch hosting the Service Console/VMkernel Port Management Network, providing a redundancy, see ESX/ESXi host displays warning message when test condition is false (2008602).
 
Note: If the warning continues to appear, disable and re-enable VMware High Availability in the cluster.

To set das.ignoreRedundantNetWarning to true:

From the VMware Infrastructure Client, right-click on the cluster and click Edit Settings.
Select vSphere HA and click Advanced Options.
In the Options column, enter das.ignoreRedundantNetWarning
In the Value column, type true.

Note: Steps 3 and 4 create a new option.
 
Click OK.
Right-click the host and click Reconfigure for vSphere HA. This reconfigures HA.
To set das.ignoreRedundantNetWarning to true in the vSphere 5.1 Web Client:

From the vSphere Web Client, right-click the cluster.
Click the Manage tab for the cluster, then under Settings click vSphere HA.
Click Edit in the top right corner.
Expand the Advanced Options section, and click Add.
In the Options column, type das.ignoreRedundantNetWarning.
In the Value column, type true.
Click OK.
Right-click the host and click Reconfigure for vSphere HA.

2018/10/08 18:59 2018/10/08 18:59
Posted
Filed under Study

Change the Group Policy on your local client to use the vulnerable setting 

Run:  gpedit.msc

Go to à Computer Configuration -> Administrative Templates -> System -> Credentials Delegation -> Encryption Oracle Remediation

 

Open - Encryption Oracle Remediation à  choose Enable  à change protection levelàVulnerable à Apply

그룹정책편집기를 실행합니다.(gpedit.msc)

사용자 삽입 이미지
관리템플릿-시스템-자격증명위임-Oracle 수정 암호화 를 그림과 같이 변경해주면 모든 서버들을 업데이트 해야하거나 변경할 필요가 없습니다. 서버들을 5월자 업데이트를 완료하면 이문제가 사라지지만 이미 클라이언트PC가 업데이트가 되어 있기 때문에 클라이언트에서 변경을 해주는게 번거로운 작업을 피할수 있을거 같습니다.



2018/05/15 12:23 2018/05/15 12:23
Posted
Filed under Study
https://practical365.com/exchange-server/add-ip-block-list-provider-exchange-server-2013-edge-transport/
사용자 삽입 이미지

Add-IPBlockListProvider -Name Spamhaus -LookupDomain zen.spamhaus.org -AnyMatch $true -Enabled $true -RejectionResponse "IP address is listed by Spamhaus"

Set-IPBlockListProvider Spamhaus -RejectionResponse "IP address is listed by Spamhaus Zen."

사용자 삽입 이미지

사용자 삽입 이미지
Get-AntispamTopRBLProviders.ps1

우클릭 실행하거나 파워쉘로 실행하고나면 정식적으로 메일서비스를 하지 않는 SMTP서버 스팸은 100프로 차단된다고 볼수 있습니다.
2018/04/06 20:05 2018/04/06 20:05
Posted
Filed under Study
PS2 마우스 키보드가 없는 사용자라면 복원할 방법이 없다고 하기에 포맷하라고 하는데 필자가 여러가지로 고민해봐서 결론을 내려봤습니다.
몸은 서울에 있고 제주도에서 데이터도 살려야되고 작업도 해야되고 기타등등 전화를 받고는...
안전모드로 가서 업데이트 삭제하면 되겠지? 했지만 안전모드 역시도 작동불가.
부팅 복원모드로 접근하여 업데이트 패키지를 삭제하는 최후는 아니고 몇가지 방법이 존재합니다.
처음에는 복원모드에서 시스템복원에 2월13일자 이전날짜로 복원해서 해결할려고 했지만 체크포인트 저장파일이 손상되었는지 복원 실패하였습니다.
KB4074588 문제해결을 위해 직접 이 업데이트 패치를 설치해봤습니다.
사용자 삽입 이미지
설치용량이 680MB가 넘는 용량이였네요.
사용자 삽입 이미지
자 이제 USB 작동불가로 인해 마우스/키보드가 작동하지 못하여 아무것도 못하는 연출입니다. 물론 가상화에서 시뮬레이션 한거라 가상화는 리모트콘솔 방식이라서 USB 장치를 로딩하지 않습니다.
이제 복구모드로 진입을 해야되는데 이제까지 F8로 안전모드부터 복구모드로 진입하다가 진입이 잘안되어서 그냥 빙글빙글 돌때 전원이나 리셋버튼으로 2-3번 비정상 종료를 하면 자동으로 복구모드에 진입하게 됩니다.
사용자 삽입 이미지
그림과 같이 복구모드에 진입하게 되고 고급옵션을 클릭합니다. 복구모드에서는 다행하게도 마우스와 키보드가 동작합니다.
사용자 삽입 이미지
문제해결을 선택합니다.
사용자 삽입 이미지
문제해결에서 또다시 고급옵션을 선택합니다.
사용자 삽입 이미지
고급옵션에 들어가면 여러가지 선택하는게 존재하는데 여기서 두가지 방법이 존재합니다. 첫번째로 명령프롬프트를 선택합니다.
사용자 삽입 이미지
도스 커맨드 창이 실행이 됩니다.
DISM /Image:C:\ /Remove-Package /PackageName:Package_for_RollupFix~31bf3856ad364e35~amd64~~16299.248.1.17
이 명령줄을 실행하여 100% 완료하게 되면 문제가 된 KB4074588 업데이트가 삭제 완료된 상태입니다. 그리고 커맨드창을 종료하여 재시작을 진행하면 됩니다.
그리고 아래 그림처럼 위 고급옵션에 복구옵션더보기 선택이 있습니다. 그선택을 하게되면 이전버전으로 되돌리기를 진행할수가 있습니다만 이것도 시스템복원이 실패하는 경우라면 이것역시 실패할 확률이 높습니다.
사용자 삽입 이미지
이렇게 삭제하고 나서 모든게 완벽하게 끝날줄만 알았습니다. 엄청난 기대감에 역시 난 이바닥에서 독보적이야를 자만하면서...
그런데~!!!!
사용자 삽입 이미지
네트워크 장치가 올라오지 않는겁니다. 물리머신이였다면 랜카드 드라이버를 새로 설치하면 가능했을법?한 일이기도 하지만 대부분 리얼텍이나 인텔랜 드라이버는 자체적으로 내장되어 있기에 왠지 새로 설치해도 안될거 같은 그런 상황이였습니다. 최신 패키지를 삭제하면 그이전버젼의 패키지가 드라이버 충돌이나 제거로 인해 동작불가인 현상으로 보여집니다. 일단은 마우스와 키보드가 제어가 되니까 인터넷이나 네트워크만 안되는 상황이니 추가적으로 GUI 상황에서 또 이전 패키지를 삭제할수가 있습니다. 프로그램기능 및 기능에서 업데이트 설치에 패키지 KB406892를 추가적으로 삭제하고 리부팅을 완료하면 정상적으로 사용할수 있습니다.
그리고 다시 나머지 최신 업데이트를 진행하면 문제없이 사용가능합니다. 다시 업데이트를 진행한다고 해도 KB4074588는 다시 설치되지 않을겁니다. MS에서 아마 더이상 설치되지 않게 차단해논걸로 알고 있습니다.
2018/02/26 15:09 2018/02/26 15:09