728x90

$_SERVER['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 위치 => /webapp/include


$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 받식 => gzip, deflate


$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 => ko


$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경 => Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705


$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP => xxx.xxx.xxx.xxx

 

$_SERVER['HTTP_REFERER'] = 현제 페이지로 오기전의 페이지주소값 => http://www.test.net/index.php?user=??? (A태그나 form으로 전송시 값이 넘어옴. onclick으로 전송시 값이 넘어오지 않음)


$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 => webapp/include/index.php


$_SERVER['SERVER_NAME'] = 사이트 도메인 => www.test.com (버추얼 호스트에 지정한 도메인)

 

$_SERVER['HTTP_HOST'] = 사이트 도메인 => www.test.com (접속할 때 사용한 도메인)


$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 => 80


$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 => 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['GATEWAY_INTERFACE'] = cGI 정보 => CGI/1.1


$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 => HTTP/1.1


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


$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 = /default/index.php

      *파일명만 가져올때 : basename($_SERVER['PHP_SELF']);


$_SERVER['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소 => D:\webapp/

 

$_SERVER['QUERY_STRING'] = get방식의 파일명 뒤에 붙어서 넘어오는 값 => ?user=???&name=??? (반드시get방식으로 넘겨야됨)

 

 

728x90
728x90

일부 Naver 고객샌터 인용
로봇 배제 표준이란 말 그대로 웹 문서를 수집해 가는 로봇을 배제한다는 뜻입니다.

 

로봇의 배제와 관련된 내용을 적어 놓은 robots.txt 파일을 사이트의 최상위 주소

(서버 루트 디렉토리 예:www.naver.com/robots.txt)에 저장하면 됩니다.

(robots.txt를 서브디렉토리에 저장할 경우에는 효력이 없다는 사실에 주의하세요.)

예를 들어, www.yourhost/~mypage 밑에 robots.txt가 있어도 이는 아무런 효력을 갖지 못합니다.

로봇은 오직 루트 디렉토리의 robots.txt만을 참조할 뿐입니다.

로봇의 접근을 어디까지 허용할 것이냐에 따라 robots.txt에 들어가는 내용은 달라집니다.

(robot.txt가 아닌 복수형인 robots.txt 임에 주의해주세요.)

robots.txt 저장 방법 안내
1. 홈페이지 전체가 모든 검색엔진에 노출되는 것을 원하지 않을 때

코드:
User-agent: *
Disallow: /


2. 홈페이지 전체가 모든 검색엔진에 노출되기를 원할 때

코드:
User-agent: *
Disallow:


(Ex1과 비교했을 때 “/”가 빠져 있습니다. robots.txt를 작성하지 않으면 모두 검색허용으로 간주됩니다.)

3. 홈페이지 디렉토리의 일부만 검색엔진에 노출하고 싶을 때

코드:
User-agent: *
Disallow: /my_photo/
Disallow: /my_diary/


(이렇게 작성하면 로봇은 my_photo, my_diary라는 폴더에 속한 웹문서에 접근할 수 없습니다.)

4. 홈페이지 전체가 검색되길 원하지만 특정 검색엔진을 거부하고 싶을 때

코드:
User-agent: EvilRobot
Disallow: /


위의 예에서는 “EvilRobot”이라는 이름을 가진 로봇만을 배제하게 됩니다.
('네이버'에 대해서 막고 싶다면 NaverBot을 User-agent로 설정해주시면 됩니다. Naverbot은 네이버 로봇의 이름입니다.)

5. 홈페이지 전체가 검색되길 원하지만 특정 검색엔진에게만 노출되기를 원할 때

코드:
User-agent: NaverBot
Disallow:
User-agent: *
Disallow: /


(이 경우 NaverBot만이 웹문서를 수집해갈 수 있습니다.)
“robots.txt”를 작성하는 것과 유사한 방법으로 HTML문서의 (HEAD)와 (/HEAD)태그 사이에
(META NAME="ROBOTS" ConTENT="NOINDEX, NOFOLLOW")라는 메타태그를 추가하면 로봇은 웹 문서를 가져갈 수 없습니다.

 

이 방법은 다소 번거롭기는 하지만 문서 하나하나에 대해 정확하게 명시를 해주기 때문에
가장 확실하게 로봇의 접근을 막을 수 있는 방법입니다.


로봇 배제에 대한 보다 자세한 내용은 http://www.robotstxt.org 에서 확인할 수 있습니다.


robots.txt를 서버에 저장하고 로봇이 직접 방문하지 않는 경우라고 하더라도 본인의 홈페이지 중 일부 내용
혹은 링크 값이 NAVER 웹 문서 검색 결과에 나타나는 경우가 있을 수 있습니다.


이는 다른 웹 문서들이나 사이트들이 해당 웹 문서를 링크한 경우, 그 링크에 제시된 설명에 의해서 자동적으로 생성되는 것으로,

해당 웹 사이트의 robots.txt의 존재유무나 로봇의 동작과는 무관할 수 있습니다.

--------------------------------------------------------------------
* User-agent : 수집하는 주체의 범위를 정합니다. *으로 설정할 경우 모든 봇의 접근이 격리됩니다.

naver의 경우 봇 이름은 Naverbot입니다. 'User-agent : * '와 같은 꼴로 사용합니다.


* Allow : 뜻 그대로 허락할 디렉토리를 설정합니다.


* Disallow : 뜻 그대로 불허할 디렉토리를 설정합니다. Disallow: 뒤에 아무것도 표시하지 않을 경우에도,

모든 접근을 허락한다는 뜻이 되므로 유의하세요.

만약 모든 디렉토리의 접근을 막고 싶다면 'Disallow: /'와 같이 쓰면 됩니다.

다른 포탈은 모르겠지만 현 한국에서 가장 많이 데이터를 긁어가는 포탈은 네이버 입니다.
하지만 네이버에서도 로봇은 거의 다 막아 놓고 있습니다.

http://blog.naver.com/robots.txt
http://cafe.naver.com/robots.txt
http://kin.naver.com/robots.txt
http://news.naver.com/robots.txt

엄청나게 긁어가는 포탈들의 횡포와 자기 컨텐츠를 지키려는 사람들의 조정자가 될수 있는것이 robots.txt입니다.
문론 robots.txt로 다 막을 수는 없습니다. robots.txt를 무시하는 로봇도 많습니다. 하지만 대부분은 제어가 가능 할것입니다.

728x90
728x90

검색엔진이 긁어가는 것 막기 (robots.txt 이용)

검색엔진이 자동으로 긁어가는 것을 막는 방법이다...

단순히 아래의 두 줄을 메모장 등에서 입력하고 파일명을 "robots.txt"로 저장해서 웹서버의 최상단 디렉토리에 올려놓기만 하면 된다.

robots.txt
-----------------------------------------------------------------------------------------------------------
User-agent: *
Disallow: /
--------------------------------------------------------------------------------------------
위의 두줄데로 설정하면 모든 검색엔진에 대해서 모든것을 막는다는 의미이다...



검색엔진별로 노출을 막고자 하면, 아래의 검색엔진별로 선택해서 사용하세요..^^

//모든 검색 엔진 막기
User-agent: *
Disallow: /

//네이버 로봇 막기
User-agent: cowbot
Disallow: /

//구글 로봇 막기
User-agent: Googlebot
Disallow: /
User-agent: Googlebot-Image
Disallow: /

야후 로봇 막기
User-agent: Slurp
Disallow: /
User-agent: Yahoo-MMCrawler
Disallow: /

엠파스봇 로봇 막기
User-agent: empas
Disallow: /

MSN
User-agent: MSNBot
Disallow: /

첫눈
User-agent: 1Noonbot 1.0
Disallow: /



검색엔진이 긁어가는 것 막기 (메타태그 이용법)

이 방법 외에도 html 페이지에 메타태그를 써서 검색엔진을 막을 수 있습니다.

[meta name="robots" content="noindex,nofollow"]

위 소스를 [head] 사이에 넣어주면 됩니다.


구글쪽에서 검색안된다고 메일 올경우는 아래와같이 바꿔주시면 됩니다.
User-agent: *
Disallow: /

User-agent: Googlebot
Disallow:

User-agent: cowbot
Disallow:

User-agent: Googlebot-Image
Disallow:

User-agent: Slurp
Disallow:

User-agent: empas
Disallow:

User-agent: MSNBot
Disallow:

User-agent: 1Noonbot 1.0
Disallow:



robots.txt 가 아닌 소스 하부페이지에서 검색을 차단하고 싶으면
소스 상단에 아래와같이 입력하면 된다.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW" >

 

[사이트보안] 1편 - 구글이나 네이버등 검색로봇 긁어가기 막는법


구글의 강력한 긁어가기식 로봇 검색으로 울산지역 ㅌ 케이블방송의

가입자현황이 담긴 XLS 파일이 유출되는 사고가 있었습니다.


구글이나 네이버 로봇들이 웹서버들의 인증이 안걸린 디렉토리들을

거의 다 뚫고들어오기때문인데요, 검색어로 "관리자모드"나

"회원명단" 등으로 검색해보면 심심치않게 개인정보들이 나타납니다.


주민번호가 담긴 신경외과협회 회원명단이나 포항시 공무원정보

주민번호등도 엄청나게 나타나기때문에 이런 긁어가기식의 검색 로봇을

사이트관리자로서 차단하는 방법을 찾아보고 소개합니다.


웹사이트 wwwroot 루트디렉토리에 robots.txt 파일을 하나 만듭니다.

내용에

User-agent: *
Disallow: /

라고 하시면 모든 긁어가기 검색에서 제외됩니다.


To allow all robots complete access (몽땅 긁어가기 허락)
User-agent: *
Disallow:

Or create an empty "/robots.txt" file. (빈파일 만들기로 해도 됨)

To exclude all robots from part of the server
(일부분 긁어가기 제외)

User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /private/

To exclude a single robot (배드봇이란 검색로봇만 긁어가기 제외)
User-agent: BadBot
Disallow: /


To allow a single robot (웹크롤러 검색로봇만 긁어가기 허락)
User-agent: WebCrawler
Disallow:


To exclude all files except one (한군데 빼고 몽땅 긁어가기 허락)
This is currently a bit awkward, as there is no "Allow" field. The easy way is to put all files to be disallowed into a separate directory, say "docs", and leave the one file in the level above this directory:

User-agent: *
Disallow: /~joe/docs/

위 내용들은 http://www.robotstxt.org 참고하시구요



개인들은 웹페이지의 메타태그에다

META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"

라고 해서 그 웹페이지를 긁어가기로 부터 보호할수 있습니다.


In a nutshell, when a Robot vists a Web site, say
http://www.foobar.com/, it firsts checks for
http://www.foobar.com/robots.txt. If it can find this document, it will
analyse its contents for records like:

User-agent: *
Disallow: /

 

728x90

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

웹 보안 취약점 대응 방안  (0) 2014.03.25
robots.txt 설정하기  (0) 2013.07.28
XSS 기본 방어 방법  (0) 2013.04.19
초대장 필요하신 분 받아가세요. [마감되었습니다.]  (15) 2012.07.09
주민번호 알고리즘  (0) 2012.06.20
728x90

 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 

<script type="text/javascript">

 $(function(){
  var currentTop = parseInt($("#quickmenu").css("top"));
  $(window).scroll(function() {
   $("#quickmenu").stop().animate({"top": $(window).scrollTop()+currentTop+"px"}, 500);
  });
 });

</script>

 

- quick menu bar 부분

<div id="quickmenu" style="position:absolute; left:50%; top:100px; width:100px; margin-left:450px;">...</div>

728x90

'프로그래밍 > 자바스크립트' 카테고리의 다른 글

jquery radio, select, checkbox  (0) 2013.10.28
정규 표현식 요약  (0) 2013.10.02
javascript 브라우저 종류  (0) 2012.11.23
자주 쓰이는 JQuery Ajax 예제  (0) 2011.08.02
jQuery 요약  (0) 2011.08.02
728x90

Table 구조가 아래와 같을때

key_field  : auto_increment
field(1)
...
field(n)


Key Field를 auto_increment 형태로 하여, Insert를 하던 중

select 문을 이용하여 Where 조건에 key_field 값을 넣었을때, Record가 한개도 존재하지 않는다면, 이경우 이 Data는 원래부터 Insert 되지 않았던 Data였을까? 아니면 Insert후 Delete된 Data일까?

처음엔 간단하게 Max(key_field) 값을 가지고, Key_Field의 Max값보다 작으면 삭제된 데이터,
Key_Field의 Max값보다 큰 값이면, 원래부터 존재하지 않았던 데이터로 구분하면 되지 않을까?
라고 생각했는데, 다시 생각해보니 틀린 생각.

key field field 1 ... key field n
1 data ... data
2 data ... data
3 data ... data
...
98 data ... data
99 data ... data
100 data ... data

위와 같을때, "select max(key field) from 테이블명"을 하게 되면 100이 나오므로, 정상적인 결과를 얻을 수 있겠지만,
99, 100번 레코드를 삭제한후 "select max(key field) from 테이블명"을 하게되면 max값은 98이 나오므로, 실제로 99와 100번 레코드의 경우는 삭제되었음을 알지 못하고, 이전에 입력이 되지 않았던 데이터로 분류되게 된다.

key Field가 Auto_increment 속성을 가지고 있으므로,

show table status where name = '테이블명' 을 이용하면 해당 Table의 Auto_Increment 값을 확인 할 수 있으므로, 이를 이용하여 처리하면 된다.

어쨌든, 설명이 장황한데.... 결론은 결국 원하는 Table의 Auto_Increment 값을 가져오고자 할때 어떻게 할 것인가? 이므로, 위의 사설은 다 집어치우고,
기억해야할 쿼리는 단 한가지.

show table status where name = '테이블명'
728x90

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

php 시간 계산  (0) 2013.08.12
PHP $_SERVER 정리  (0) 2013.08.01
ORACLE, MSSQL, MYSQL 날짜함수 비교  (0) 2012.08.08
php 한글 연동 시 한글 깨짐현상 복구법  (0) 2012.07.06
php Ajax 한글 처리  (0) 2012.04.20
728x90

입력받은 데이터를 서버에서 처리할 수 있는 문자셋으로 변환해서 전송하게 된다.

     <form name=”fForm” method=”post” action=”" accept-charset=”utf-8″>

     </form>

     현재 페이지의 문자셋과 관계없이 전송시에 accept-charset 에 지정된 문자셋으로 변환해서 전송하게 된다.

728x90

'프로그래밍 > 웹표준' 카테고리의 다른 글

jquery input type='file' 초기화 처리  (0) 2016.07.12
홈페이지 생성시 웹 폰트 사용하기  (0) 2015.11.24
다음 사진 올리는 방법  (0) 2015.08.12
html5 기본구조  (0) 2013.08.09
if IE 명령어 사용법  (0) 2012.10.25
728x90

Session 관리

 

1. 세션 상태 모드

 

1) InProc ( Default )

 

- 세션 정보를 웹서버 메모리에 저장

- 데이터베이스 이용하는 것보다 성능 우월

- 웹 서비스 재부팅시 모든 세션 사라짐

 

 

2) StateServer

 

- 윈도우 서버 관리도구에 있는 ASP.NET State Service 라는 서비스 데몬의 메모리 이용

- IIS 재부팅 되어도 세션 정보 유지

- 하나의 서비스 데몬이므로 여러개의 웹서버에서 하나의 세션관리 가능해짐

- 윈도우 시작시 수정 시작 설정되어 있음 ( StateServer 를 하려면 자동 고려 하거나 서비스 시작 시켜야 함 )

- 웹서버 재부팅시에는 세션 사라짐

 

 

3) SQL Server

 

- 세션 정보를 SQL Server 에서 저장 관리

- 웹서버 재부팅되어도 세션 유지

- 여러개의 웹서버에서 하나의 세션관리 가능

- 물리적인 디스크 I/O 가 발생되어 가장 느린 상테 관리 방법

 

 

2. 세션 상태 모드 설정

 

1) web.config 에서 설정

  1. <configuration>  
  2.     <system.web>  
  3.         <sessionState mode="off || StateServer || SQLServer " ~~ />  
  4.     </system.web>  
  5. </configuration>  

 

 

2) 각 소스상에서 System.Web.SessionState.HttpSession-State.Mode 속성으로 셋팅

 

 

 

[SQL Server Settion 설정 방법]

 

1. DB 에 ASPState DB 생성

 

< DB 서버 cmd 창에서 아래의 경로로 aspnet_regsql 실행 >

 

C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_regsql -S "ServerHost" -U sa -P [sa password] -ssadd -sstype c -d "ASPState"

(ex: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql -S localhost -U sa -P your-password -ssadd -sstype p)

 

위 명령어를 치면 아래 < 그림1 > 의 ASPState 라는 DB 및 관련 SP 들이 생김

 

<주의사항>

Password 등의 글자에 "&" 등이 있으면 전체 명령어를 인식하는것이 아닌 "&" 앞까지 인식.

따라서 암호에 "&" 가 있으면 aspnet_regsql -S localhost -U sa -ssadd -sstype p 로 "-P"를 빼서 명령어를 친 다음 암호 입력창이 나오면 암호입력

 

 

 

2. Web.config 설정

  1. <configuration>  
  2.     <system.web>  
  3.             <sessionState mode="SQLServer"   
  4. sqlConnectionString="data source=ServerHost; User ID=SessionUserID; Password=SessionUserPassword" timeout="3600" />  
  5.     </system.web>  
  6. </configuration>  

 

- 사용하고자 하는 User ID의 DB 계정은 ASPState에 대해 db_owner 이거나 아니면 최소한 db_datareader, db_datawriter 역할과 자동 생성되는 Stored procedure에 대해 실행 권한이 있어야 함.

 

 

< 그림1 >

 

 

 

 

< aspnet_regsql 파라미터 >

 

Parameter

Description

-S [Server Name] Sql Server name or IP address, where sessions will be stored
-E  Windows authentication is used to access SQL Server
-U [User Name] User name, if SQL authentication is used
-P [Password] Password, if SQL authentication is used
-D [Database Name] Database name. This parameter is used if parameter -sstype is equal to "c", which means that custom database is used as session storage.
-ssadd Abbreviation of "Session State Add". This option adds session state database.
-ssremove  This parameter removes existing session state database.
-sqlexportonly [Script File Name or Full Path]

 If this parameter is used, program will not execute any SQL, but just create T-SQL script which can be executed later on server(s). This is useful in shared hosting scenario.

Type of session state storage. There are three possible values:

-sstype [t|p|c] t, means temporary storage. Tables are created in temdb database. In this case session is lost if SQL Server restarts,
 p, represents persistent storage. Session state tables are created in AspState database,
 c, custom storage. In this case, you specify database name where sessions will be stored. Database name is set using -D parameter.

 

 

< ASPStateTempSessions 테이블, ASPStateTempApplications 테이블 내용 >

 

- 사이트에 접속된 사용자가 있으면 ( 처음 이거나, 세션기간만료 사용자 ) ASPStateTempSessions 테이블에 Row 생성 ( 만료일자: web.config 값에 따라 셋팅 )

 

 


728x90
728x90

--2008 이전 버젼의 경우

BACKUP LOG EchoRPT WITH NO_LOG

DBCC SHRINKDATABASE (EchoRPT, TRUNCATEONLY)

--2008 버젼의 경우

GO
-- Truncate the log by changing the database recovery model to SIMPLE.

ALTER DATABASE DB이름
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (DB이름_log, 1); --1mb로 축소
GO
-- Reset the database recovery model.
ALTER DATABASE DB이름
SET RECOVERY FULL;
GO

728x90

+ Recent posts