Aug 20, 2018 - url special scheme

http://,ftp://,market://과 같은 문자열을 url scheme이라 부릅니다.

url special scheme 에서 처리된 내용을 첨부합니다.

위키피디아에 대한 내용입니다.

//americanbilliardclub.com/about/history/
http://americanbilliardclub.com/about/history/

두개의 링크가 존재했을 때, 위키피디아의 화면은 https 입니다. 클릭시, americanbilliardclub.com 의 도메인을 가진 홈페이지는 https 를 대응하지 않는 사이트로, 강제로 http를 넣으면 잘되지만, // 만 넣고 스키마를 넣지 않은 도메인에서는 위키피디아의 https 를 그대로 사용하기 때문에,

이 페이지를 표시할 수 없습니다.

라는 메시지가 뜨게 됩니다. // 만 사용할 경우, Protocol-Relative URL로 현재 쓰고있는 프로토콜을 명시합니다. 현재 접속한 페이지는 https 이니 https://와 동일해집니다. 만약 접속한 페이지가 http 면 자동으로 http로 변환해줍니다.

여지까지 개발시, 동적 https 와 http를 판단하기 위해서는,

    var url = ('https:' == document.location.protocol ? 'https:' : 'http:') + "//xxx";

document.location.protocol 을 사용하여 판단하거나 java 단에서는 헤더정보를 이용하여 판단했습니다. 광고솔류션의 경우, 어떤 매체, 어떤 광고주에 우리 스크립트가 삽입되는지, 개발자가 일일이 신경쓰지 못할 경우, 사용자에 따라 http, https 가 다양하게 들어올 경우에 대한 대응 책으로,

<script src="//code.jquery.com/jquery-2.2.3.min.js"></script>

가 우선적으로 처리되고 있지만, 해당 기술은 2010년도에 나온 little trick 입니다.
이미 2014년도에 사용하지 않게 지양되고 있는 기술입니다.

URL 표준에는 없지만 Uniform Resource Identifier (URI) 표준인 rfc3986#section-4.2에서 명시하고 있습니다.

남용하지 말아야한다는 이야기입니다.
http 일지 https 일지 모르는 브라우져에서,
무언가를 해야한다면,
그냥 https 를 사용하는 게 좋다고 결론이 나오는 거 같다는 결론이 나옵니다.

다만, 왜 광고솔류션 특징상 본인의 홈페이지에 iframe이나 script나 image가 삽입되는 것이 아니므로, 정확하게 보안이슈가 아닌 어찌해서 안되는 지에 대한 부분을 조금 더 찾아봐야할 거 같습니다. 좀더 좋지 않았을 까 싶은데, 해당 내용을 찾기가 어렵네요.

https://url.spec.whatwg.org/#special-scheme

어디에도 ‘//’를 사용해도 좋다라는 글은 없으며, 테스트할 때, 크롬에서 about:// 이 스키마로 붙는 경우가 생겨, 해당 문제에 대해 고찰했습니다.

사용가능한 경우는 a, link element, href attribute 정도로 국한해서 처리되었으면 합니다.

<iframe src="about:blank" width="300" height="120" ></iframe>

예를 들어, iframe 의 src는 about:blank 로 되어있으며, 해당 iframe 안에서 팝업이 뜬 상태에서 부모창을 제어할 때, about://도메인 으로 호출하는 구조가 되게 되므로, 이 경우에는 “//도메인”형태를 사용해서는 안됩니다.


참조


Aug 20, 2018 - removeFirstPrenpend

요소 속성 --- dynamic 태크는 다른 동적 sql요소를 포장하고 결과적인 내용물을 위해 prepend, open, close를 수행하기 위해 제공되는 간단한 태그입니다. prepend ``` 속성값을 요소 내용의 가장 앞에 붙이기 위해 사용한다. prepend의 값은 요소 내용이 공백일 때는 앞에 붙이지 않는 다. ``` open ``` open 값은 요소 내용에 접두사로 붙이기 위해 사용한다. open 값은 요소 내용이 공백일 때는 출력되지 않는다. open 값은 prepend 속성 값보다는 뒤에 붙는다. 예를 들면 prepend="WHEN" 이고 open="(" 라면 조합된 결과는 "WHEN (" 가 될 것이다. ``` close ``` close 값은 요소 내용의 뒤에 덧붙이기 위해 사용한다. 이 값은 요소 내용이 공백이라면 출력되지 않는다. ``` ``` select * from account acc_first_name = #firstName# acc_last_name = #lastName# </dynamic> order by acc_last_name </statement> ``` 위와같은 dynamic 쿼리를 사용할 경우, firstName 와 lastName. 이 두가지 값이 있다면, 당연하게도 where 다음에는 and가 바로 붙을 경우, ``` select * from account where and acc_first_name = #firstName# or acc_last_name = #lastName# ``` 이런 이상한 구문이 완성될 것이라고 생각했습니다. 분명 prepend 로 인해 구문 오류가 발생할 것이라고 생각한 것입니다. 하지만, 이 태그를 사용할 때 removeFirstPrepend속성이 강제로 적용된다고 합니다. 즉 맨 처음 나오는 prepend속성놈은 강제로 생략된다는 이야기로, dynamic 태그안에 removeFirstPrepend = true가 적용은 되지만 생략된 채로 있다고 보면 됩니다. ----- # 참조 ----- * [iBATIS 동적 WHERE 절 다루기 위한 요소 설명](http://syaku.tistory.com/51) * [iBatis 동적 쿼리문 생성](http://narrowway.tistory.com/79) * [dynamic 태그, isParameterPresent, removeFirstPrepend 설명](http://javafactory.tistory.com/354) * [Dynamic SQL](http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html)

Aug 19, 2018 - 개인 서버 보안 설정

대부분 개인 서버 관리를 하는데, 집에 설치하는 사람도 있고, 나처럼 매달 서버비를 내면서 개인서버를 운영하는 사람도 있겠죠.

국내에 동일 사양이 4만원 대인 반면, 해외에 해당 사양은 1만원 이하인 경우가 많아, 해외 서버를 이용합니다.

가장 먼저 설치하는 것은

htop 입니다.

yum install htop

그냥 서버 상태 모니터링인데, cpu 나 mem을 볼때 자주 이용합니다. 해외 서버를 사용하면, 참 골치아픈게, 해킹이라고 할지 로그인 시도가 엄청 들어옵니다.

첫번째 방어하기 위해 fail2ban 을 설치했습니다.

tail -f /var/log/secure

secure 로그를 보면 전혀 이상한 ip(중국, 태국)에서 로그인시도를 계속 합니다. fail2ban 이 하는 역활은, 계속 반복해서 접속하는 로그인 실패하는 특정 ip를 바로 차단하는 건데….

ip가 계속 바뀌면서 로그인을 시도합니다.

bind 기능을 설치해봤습니다.

yum install bind bind-utils -y

별 소용이 없습니다.

cat /var/log/secure | grep Accepted | awk '{print $9"\t"$11"\t"$14}' | sort | uniq

그러다가 문득 제타위키에서 ssh 접속 허용을 만든 방법이 있더군요.

참고주소

/etc/hosts.allow 수정하는 방법입니다.

#
# hosts.allow	This file describes the names of the hosts which are
#		allowed to use the local INET services, as decided
#		by the '/usr/sbin/tcpd' server.
#
sshd: 113.157.124.168, 135.79.246.

→ 113.157.124.168와 135.79.246.XXX 대역을 허용

위와 같이 특정 아이피만 허용해서 로그인을 하면, 외부의 유입에 대해 걱정을 안할 수 있게 되었습니다.

회사에서 접속할때는 회사가 고정ip라 문제가 없지만, 집에서 접속할때는 가끔 ip가 바뀌는 경우가 있어, 그 부분에 대한 문제가 있지만, 해외 관리 서버들은 대부분 웹(브라우져)에서 접속할 방법이 있어, 웹에서 접속해서,

vi /etc/hosts.allow 로 접근합니다.

참고로, 해당 방법은 로그인만 차단하는 것으로, db, svn, ftp 등의 다른 포트의 접근을 막는건 아닙니다.