[PHP] 보안 국내 IP 대역만 접속 하도록 응용

프로그래밍/PHP|2015. 1. 27. 11:26
반응형

국내 아이피 대역을 확인 하실려면
https://ip.nida.kr/ip_cate_stat/stat_05_04.act

에서 확인 가능하며 엑셀 파일로도 다운 가능 합니다. 
https://ip.nida.kr/ip_cate_stat/stat_05_04_toexcel.act

다운 받은 엑셀 파일내용 중 시작IP 와 마지막 IP 값을
각 자리수가 3자리가 되도록 수정후 . 점을 제거 합니다.


202.6.95.0 인경우 202006095000 처럼 바뀌겠군요.

이렇게 바뀐 값을 "시작IP_마지막IP" 처럼 변경해서 배열로 담습니다.
저의 경우 에디트 플러스를 활용 했습니다.

$ipgroup = array("2020060950000_202006095255","202014103000_202014103255");
처럼 배열로 담습니다.

이후 추가되는 IP만 배열에 계속 추가 해주면 됩니다.
이와 같은 변경하는 작업을 어럽게 느끼시는 분을 위해 제가 오늘 날짜로 올라온것 까지 작업해서 첨부 해놨습니다.


첨부파일 다운받으실려면 회원가입후 이메일 인증 받으시고 등업요청후 제가 승인하면 다운 가능 해 집니다.
워낙 광고 도배하는 회원이 있어서 이와 같은 복잡한 절차를 거치도록 했으니 양해 바랍니다.

이제 저 배열을 활용하기만 하면 되겠군요.
접속자 IP를 받아서 비교를 한번 해보겠습니다.

$userip = getenv("REMOTE_ADDR");
//. 점으로 구분해서 변수로 담습니다.
$tmpuserip = explode(".",$userip);
//str_pad 함수를 이용해서 자리수를 "0"으로 채워 하나의 값으로 합칩니다.
$userip = str_pad((int)$tmpuserip[0],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[1],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[2],3,"0",STR_PAD_LEFT).str_pad((int)$tmpuserip[3],3,"0",STR_PAD_LEFT);
//배열 IP만큼 돌립니다.
for($i=0;$i<count($ipgroup);$i++) {
 //변수값을 분리합니다.
 $tmpip = split("_",$ipgroup[$i]);
 //접속자 IP가 시작IP값보다 크거나 마지막 IP보다 작은 값이면 포함되는 값이므로 차단
 if($tmpip[0]<=$ip || $tmpip[1]>=$ip) {
  echo "국내 IP만 접속 허용합니다.";
  exit;
 }    
}


배열 값은 "대역 시작 IP _ 대역 끝 IP" 로 저장 되어 있습니다.
따라서 접속한 사용자의 IP를 받아서 루프를 돌며 해당 대역에 포함되는지 체크하시면 됩니다.

참, IP6 IP에 대해서는 별도로 처리 하셔야함을 잊지 마세요! ^^


반응형

댓글()

HTML 기본 태그 #5 - css & Style

반응형

STYLE - 스타일시트

속성

속성값 및 의미

background-color배경색 지정.
<table class="이름"> ... </table> 처럼 table, td에서도 사용할 수 있다.
background-imageurl(이미지가 있는 위치)undefined.
이미지 삽입.
background-repeatno-repeat 속성값을 주면 바둑판식 채우기가 아닌 해당 이미지만 보여준다.
.bg{background-repeat:no-repeat;background-img:url(주소)undefined;}
background-attachmentfixed 속성값으 주면 삽입한 이미지를 fix 형태로 바둑판 채우기가 된다.
border숫자px solid 형태로 table의 외각 테두리 지정.
<table clss="이름" border=0> 방식으로 테두리를 지웠다고 해도 "숫자px"에 의해서 외각 테두리가 보인다.
border-colortable의 테두리 색 지정.
border-left위의 border와 같으며 table의 테두리 왼쪽 외각 지정.
border-top위의 border와 같으며 table의 테두리 위쪽 외각 지정.
border-right위의 border와 같으며 table의 테두리 오른쪽 외각 지정.
border-bottom위의 border와 같으며 table의 테두리 아래쪽 외각 지정.
들여쓰기<td style="padding-left:숫자"> 형태로 테이블안의 왼쪽 들여쓰기 지정.
이것은 head안의 style에서 이름{padding-left:숫자;}의 형태로 명시할 수 있다.
<td class="이름"> 형태로 사용한다.
font-size글자 크기.
font-family글꼴 지정.
color글자색 크기
leter-spacing속성값은 숫자px.
문자와 문자 사이 및 스페이스 공간의 여백 지정.
word-spacing속성값은 숫자px.
스페이스(띄어쓰기)의 공백 넓이를 지정한다고 보면된다.
text-decoration  blink           : 줄이 그어지지 않는다.
  underline     : 밑줄 쫘악~~.
  line-through : 글 중간에 줄 긋기.
  overline      : underline의 반대 의미로 글 위에 줄 긋기.

필터효과

FILTER글자에 사용하는 속성값들 ..
blur(), glow(), fliph(), flipv() ..
속성값에서 blur(strength=숫자) 형태로 strength에 부여 받은 숫자에 영향을 받아서 해당 필터 속성의 농도가 틀려진다.
이미지에 사용하는 ..
alpha(opacity=100, style=1 finishopacity=0)의 형태로 style은 1~3까지 사용한다.
특히 배경 그림이 있는 문서의 테이블을 만들면 해당 부분이 하얀색으로 나온다.
이럴 경우 테이블에서 다음과 같이 <table style="filter:alpha( .. .. ..)"> 형태로 사용하면 그러한 부분은 어느정도 해소된다.

ex) 1. 이미지 위에 마우스가 유무에 따른 필터 ..
<img src="주소" onmouseout="this.style.filter='filtername'" onmouseover="this.style.filter='invert'">
onmouseout은 마우스가 이미지에 없는 경우, onmouseover는 마우스가 이미지 안에 있는 경우.
this.style.filter = filtername, gray, invert, fliph, flipv, xray 값이 있다.
원본을 이미지를 그대로 나타낼려면 this.style.filter='filtername' 값을 주면 된다.

 

ex) 2. iframe에서 사용.
<iframe src="주소" width="값" height="값" style="filter:alpha(opacity=75)">

 

ex) 3. onmousedown를 이용한 새창 띄우기.
  <script>
    function mouse_click(url, winname,features) {
        window.open(url,winname,features);
    }
  </script>
  </head>
  <body topmargin="0" leftmargin="0">
    <a href="#" onmousedown="mouse_click('새창주소','','width=50%길이,height=50%')">
    <img src="클릭할 이미지 주소" width="65%"></a>
   .. .. ..
  </body>


참고 - 팝업 띄우기   

<html><head><title>팝업창띄우기</title>

<script language="javascript">
    function window_open() {
         window.open('팝업창파일주소', 'popup', 'top=0, left=0, width=260, height=260 directories=no')
    }
</script>
  </head>
  <body onload="window_open()">

스타일시트 사용 예 ..

1. head안에서 사용하는 방법
  <head>
  <style type="text/css">
    <!--
        body{font-size:12pt; font-family:맑은고딕;color:blue;}
        font{font-size:12pt; font-family:맑은고딕;color:green;}
        font.a{font-size:12pt; font-family:맑은고딕;color:blue;}
        .b{font-size:10pt; font-family:맑은고딕;color:blue;}
        td{font-size:9pt;color:#0000ff;}
    -->
  </style>
  </head>
  <body>
  Body, font, td{ } 형태로 여러개의 인자를 하나의 스타일로 지정할 수 있다.
  { } 안은 속성이름:속성값; 형태로 명시한다.
        <font>font 스타일</font>
        <font class="a">font.a 스타일</font>
        <font class="b">.b 스타일</font>
        <span class="b">.b 스타일.</span>
        <div class="b">.b 스타일</div>
  </body>

2. head안에서 사용하는 또 다른 방법
  <head>
     <link rel="stylesheet" type="text/css" href="스타일시트가있는 파일">
  </head>
  <body>
  스타일시트를 명시해 놓은 파일을 head 안에서 링크를 걸어 놓고 사용해도 된다.
  해당 파일의 내용은 - 명시할이름{속성이름:속성값;속성이름:속성값;} 으로 만들어 놓으면 된다.
  </body>

3. body안에서 사용하는 방법
  <body>
    <font style="font-size:12pt;font-family:달나라토끼;color:#00ff00">
      font 태그 자체에 style 속성을 직접 줘서 사용하기.
    </font>
  </body>

4. 링크를 클릭하면 글 색이 변하는 것을 방지하기 위한 방법
<head>
<style>
<!--
a{font-size:12pt;color:blue;text-decoration:none;}
a:visited{font-size:12pt;color:blue;text-decoration:none;}
-->
</style>
</head>
<body>
<a href="링크될 곳">클릭</a>
</body>

 

 

[출처] Spritual Awakening | Yury (http://forlov3u.blog.me/20124855699)

반응형

댓글()

현재 페이지 URL 주소 알아내기

프로그래밍/PHP|2015. 1. 27. 11:26
반응형
현재 페이지의 주소 구하기 
$url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; 

주소 구하여 유니코드로 전환하기 
$url = urlencode($url);
 

보낼때-
urlencode();
 

받을때-
urldecode();


반응형

댓글()

자바스크립트 펼치기 접기 소스 2

반응형

<SCRIPT LANGUAGE="JavaScript">
<!--
  function viewStyle(obj){
    while(true){
      if((obj=obj.nextSibling).nodeName=="DIV"){
        obj.style.display=(obj.style.display!='block')?'block':'none';
        obj.style.fontSize = "22px"; //12px로 변경하세요.. 확인하시라고 크게 하였습니다.
        obj.style.color = "#FF0000";
        break;
      }
    }
  }
 
//-->
</SCRIPT>
<a href='#' onclick="viewStyle(this);return false">클릭</a>
<DIV style='display:none'>내용을 쓰시오</DIV>

 

 

[출처] 지식인 | scriptwin (http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040202&docId=105583617&qb=amF2YXNjcmlwdCDtjrzsuZjquLA=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=glaZ3soi5UZsstEInqVsss--208008&sid=TgFE3N8iAU4AABm6G3Y)

반응형

댓글()

자바스크립트 펼치기 접기 소스

반응형

일단 다음 예제를 보자. 


위와 같은 효과를 주기 위해서는 Span태그의 스타일인 Display를 조절하면 된다. 위 예제의 소스코드는 다음과 같다. 

(Language : html4strict)
  1. <SPAN id=test1_1><A  href="javascript:Open();">글 내용 펼치기</A></SPAN>
  2. <SPAN id=test1_2 style="DISPLAY: none"><A href="javascript:Close();">글 내용 접기</A><br />글 내용을 펼쳐야 이 부분이 보이게 됩니다. </SPAN>
  3. <script name=javascript>
  4.     function Open()
  5.     {
  6.         document.getElementById('test1_1').style.display='none';
  7.         document.getElementById('test1_2').style.display='';
  8.     }
  9.     function Close()
  10.     {
  11.         document.getElementById('test1_2').style.display='none';
  12.         document.getElementById('test1_1').style.display='';
  13.     }
  14. </script>


  15. 원리는 간단하다. '글 내용 펼치기' 링크와 실제 보여줄 내용을 각각 다른 span 안에 넣어둔 후 두 레이어가 서로 번갈아가며 보이면 되는 것이다. 이를 자바스크립트를 이용하여 구현하기 위해서는 getElementById라는 함수를 쓰게 되는데, 이는 span 태그에서 설정한 id를 이용하여 해당 객체를 얻어내는 기능을 한다. 객체를 얻어 낸 후에는 스타일의 디스플레이 속성을 조절하게 된다. 디스플레이 속성에 아무 값도 주지 않았을 경우에는 레이어가 보이며, none 속성을 주면 레이어가 보이지 않게 된다.
     
     


반응형

댓글()

스마트폰으로 접속시 특정 사이트로 이동 소스 Javascript

반응형

아이폰, 아이팟, 윈도우모바일, 심비안, 블랙베리, 안드로이드로 접속시 웹하드로 바로 접속되게 만들어주는 소스.
아닐 경우 다른 사이트로 이동.

 

Javascript, HTML에서 바로 사용이 가능함.

<script type="text/javascript">
 if((navigator.userAgent.match(/iPhone/i))
 || 
 (navigator.userAgent.match(/iPod/i))
 || 
 (navigator.userAgent.match(/Windows CE/i)) 
 || 
 (navigator.userAgent.match(/Symbian/i)) 
 ||
 (navigator.userAgent.match(/BlackBerry/i))
 ||
 (navigator.userAgent.match(/Android/i)) )
 {
    parent.window.location.href='http://heeseop.lgnas.com:8000';
 } else {    parent.window.location.href='http://heeseop.lgnas.com/gb/bbs/board.php?bo_table=Guestbook'; }
 
</script>


 

[출처] HEESEOP'S BLOG (http://wima57.tistory.com/287)

반응형

댓글()

[HTML] 스마트폰에서 홈페이지 잘 보이게 하는 방법

반응형

기존 홈페이지의 html 헤더에 

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi">

위의 메타 태그만 넣으시면 스마트폰에서 잘 보이실 겁니다. 

[발췌] 지식인 | momma3 (http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=105&docId=130039598&qb=PG1ldGEgbmFtZT0gY29udGVudD0=&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=gQrtuv331xlssbMu8aKssv--493412&sid=Tfq@aiyL@k0AAFHFlKA)

반응형

댓글()

HTTP_USER_AGENT를 사용해서 모바일 접속환경 구분하기

프로그래밍/PHP|2015. 1. 27. 11:24
반응형

PHP의 전역변수 중에 '$_SERVER['HTTP_USER_AGENT']'라는 게 있다. 유저의 브라우저 접속환경을 파악하는 데 사용되어지는 변수인데, 이것으로 브라우저별로 스타일을 다르게 보여지게 하거나 필요한 동작을 요청할 수 있다.

 

최근에 모바일 기기로 홈페이지에 접속하는 사람들이 늘면서, PC의 웹브라우저 뿐만 아니라 이 모바일 기기별로도 구분을 해줘야 하는 일이 생기게 되었다.

 

그럼 어떻게 구분을 할 수 있을까?

 

아이폰4로 접속했을 경우,

 

echo $_SERVER['HTTP_USER_AGENT'];    // Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; ko-kr) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

 

유저 에이전트를 찍어보면 위와 같이 접속 브라우저의 정보가 출력된다. 이것으로 다음과 같이 문자열을 뽑아 매칭해보자.

 

첫 번째 방법으로는 preg_match 함수로 정규식을 사용하는 방법이 있다.

 

preg_match('/(iPhone|Android|Opera Mini|webOS)/i'$_SERVER['HTTP_USER_AGENT'])

 

사용예제

if(preg_match('/(iPhone|Android|Opera Mini|SymbianOS|Windows CE|BlackBerry|Nokia|SonyEricsson|webOS|PalmOS)/i'$_SERVER['HTTP_USER_AGENT'])) {
    $리다이렉트 = "어디로든지 가버렷!";
}

 

두 번째 방법으로는 strpos 함수로 문자열을 뽑아내는 방법이 있을 수 있다.


strpos($_SERVER['HTTP_USER_AGENT']'iPhone')

strpos($_SERVER['HTTP_USER_AGENT']'Android')

.

.

.

 

사용예제

if(strpos($_SERVER['HTTP_USER_AGENT']'iPhone') !== false) {
    $리다이렉트 = "아이폰만 볼 수 있는 페이지임 ㅋㅋ";
else if(strpos($_SERVER['HTTP_USER_AGENT']'Android') !== false) {
    $리다이렉트 = "요건 안드로이드만 볼 수 있는 페이지임 ㅋㅋㅋ";
else {
    $리다이렉트 = "......넌 누구냐?";
}

 

비교할 문자열은 아래 링크에서 찾아볼 수 있다.
http://www.zytrax.com/tech/web/mobile_ids.html

 

구분해낼 모바일 기기가 적을 경우 두 번째 방법이 낫겠고, 모두 다 혹은 다수의 기기를 한꺼번에 구분하고자 한다면 첫 번째 방법이 좋겠다.

 

 

[출처] Rearviewmirror | 김말고 (http://rearviewmirror.co.kr/70107414805)

반응형

'프로그래밍 > PHP' 카테고리의 다른 글

[PHP] 보안 국내 IP 대역만 접속 하도록 응용  (0) 2015.01.27
현재 페이지 URL 주소 알아내기  (0) 2015.01.27
자리수 채우기 str_pad  (0) 2015.01.27
php $_SERVER[]  (0) 2015.01.27
SUBSTR 함수 사용법  (0) 2015.01.27

댓글()

자리수 채우기 str_pad

프로그래밍/PHP|2015. 1. 27. 11:24
반응형

str_pad($test,3,' ' ,STR_PAD_LEFT)

 

str_pad(변수명 , 총자리수 , 채울문자, 왼쪽에채움/오른쪽에채움)

 

 

<?php
$input = "Alien";
echo str_pad($input, 10);                                                     // produces "Alien    "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);            // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);            // produces "__Alien___"
echo str_pad($input, 6 , "___");                                          // produces "Alien_"
?>

 

 

[출처] 바다는 비에 젖지 않는다 | 개발자 (http://pusankjs.blog.me/40030281100)

반응형

댓글()

php $_SERVER[]

프로그래밍/PHP|2015. 1. 27. 11:23
반응형

<?

//현재 사이트가 위치한 서버상의 위치 => /webapp/include

$_SERVER['DOCUMENT_ROOT'];

 

//인코딩 방식 => gzip, deflate

$_SERVER['HTTP_ACCEPT_ENCODEING'];

 

//언어 => ko

$_SERVER['HTTP_ACCEPT_LANGUAGE'];

 

//사이트 접속한 사용자 환경 => Mozilla/4.0(compatible; MSIE 6.0; Window NT5.1; Q312461; .NET CLR 1.0.3705

$_SERVER['HTTP_USER_AGENT'];

 

//사이트 접속한 사용자 IP => xxx.xxx.xxx.xxx

$_SERVER['REMOTE_ADDR'];

 

//실행되고 있는 위치와 파일명 => webapp/include/index.php

$_SERVER['SCRIPT_FILENAME'];

 

//사이트 도메인 => www.crazy-cupid.com

$_SERVER['SERVER_NAME'];

 

//사이트가 사용하는 포트 => 80

$_SERVER['SERVER_PORT'];

 

//서버의 소프트웨어 환경 => Apache/1.3.23(Unix) PHP/4.1.2 mod_fastcgi/2.2.10 mod_throttle/3.1.2 mod_ssl/2.8.6 OpenSSL/0.9.6c

$_SERVER['SERVER_SOFTWARE'];

 

//CGI정보 => CGI/1.1

$_SERVER['GATEWAY_INTERFACE'];

 

//사용된 서버 프로토콜 => HTTP/1.1

$_SERVER['SERVER_PROTOCOL'];

 

//현재 페이지의 주소에서 도메인 제외 => /index.php?user=???&name=???

$_SERVER['REQUEST_URI'];

:: 인증 후에 넘어갈때, 정확치 않은 복수개의 변수 값들이 딸려올때 사용.

::form으로 넘긴 값에서 hidden이나 post로 넘긴 값은 안나타남.

::get으로 넘겨야 모든 변수들이 나타남.

 

//현재 페이지의 주소에서 도메인과 넘겨집는 값 제외 => index.php

$_SERVER['PHP_SELF'];

 

//현재 페이지의 실제 파일 주소 => D:wdbapp/

$_SERVER['APPL_PHYSICAL_PATH'];

 

//넘어온 변수들만 저장 => user=???&name=???

$QUERY_STRING

 

// => admin_id@userhost.co.kr

$SERVER_ADMIN

 

//현재의 쿠키 정보저장 => email=moai; name=aaa

$HTTP_COOKIE

::가끔 씀. 현재의 쿠키 파악해서 strchr 등으로 찾아서 원하는 쿠키만을 삭제, 추가할때 씀.

 

//쿠키변수의 값을 저장. 쿠키변수들이 어떤 것이 저장되어 있는지 확실히 아는 경우 사용

$HTTP_COOKIE_VARS['쿠키변수이름']

 

//넘어온 변수들의 방식이 GET인지 POST인지 저장

$REQUEST_METHOD

?>

 

 

[출처] 이홍재 (http://blog.naver.com/PostView.nhn?blogId=hongjae83&logNo=150034393189&redirect=Dlog&widgetTypeCall=true)

반응형

댓글()

한개의 체크박스만 선택 가능하게 설정

반응형

http://www.jasko.co.kr/src/20011002/select_one.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Jasko Sample Script </TITLE>
<style>
body,td {font-size:12px}
</style>

<!----- 1. 아래의 스크립트를 HEAD 부분에 붙여 넣으세요 -------->

<SCRIPT LANGUAGE="JavaScript">
<!-- 
function checkBoxValidate(cb) {
for (j = 0; j < 8; j++) {
if (eval("document.myform.ckbox[" + j + "].checked") == true) {
document.myform.ckbox[j].checked = false;
if (j == cb) {
document.myform.ckbox[j].checked = true;
         }
      }
   }
}
//  -->
</script>

<!------------------ 여기까지 --------------->

</HEAD>

<BODY>

<p align=center>
아래 체크박스에서는 한가지만 선택이 가능합니다
<p align=center>

<!----- 2. 원하는 위치에 아래와 같이 코드를 붙여 넣으세요 ------->

<form name=myform>
항목 1<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(0)"><br>
항목 2<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(1)"><br>
항목 3<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(2)"><br>
항목 4<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(3)"><br>
항목 5<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(4)"><br>
항목 6<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(5)"><br>
항목 7<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(6)"><br>
항목 8<input type="checkbox" name="ckbox" onClick="javascript:checkBoxValidate(7)"><br>
</form>

<!------------------ 여기까지 -------------->

</BODY>
</HTML>

 

[출처] 자스코 (http://www.jasko.com/xe/6573)

반응형

댓글()