검색엔진이 긁어가는 것 막기 (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: /

 

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

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

 

<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>

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

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

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 = '테이블명'

'프로그래밍 > 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

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

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

     </form>

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

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

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

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 값에 따라 셋팅 )

 

 


--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

이번에는 XSS공격에 대하여 몇자 적어 봅니다.

Cross Site Scripting 웹사이트에 접속한 사용자가 공격의 대상이 되는 기법으로, 사용자의 입력 값에 악의적인 Javascript code 삽입하여 페이지를 로드 함으로 현재 페이지를 열람하는 사용자에게 스크립트를 실행시키도록 하는 것입니다. 그러므로 사용자의 입력을 받는 모든 사이트에서 XSS공격이 일어날 가능성이 있습니다. 특히 다음과 같은 상황에서 자주 발생합니다.

1. 검색할 단어를 입력하는 Input 영역에서 검색단어를 입력한 , 검색 결과와 함께 입력한 검색 키워드를 다시 보여주는 경우

2. 사용자 입력 폼에 입력한 내용들을 다시 출력하는 경우

3. 게시판에서 내용들을 열람하는 경우

공격자는 XSS 통해서 사용자의 쿠키를 변경하거나 탈취할 있으며 정상적인 사용자에 대해서 잘못된 정보를 보내줄 수도 있습니다. 이러한 XSS 최근 Phishing기법에 많이 사용되는데 악의적인 사용자가 변조된 입력 폼을 제공함으로 다른 사용자의 정보가 노출되고 있습니다. 또한 자바 스크립트 코드뿐만 아니라 object들을 사용자의 브라우저상에서 실행시킴으로 광고팝업이나 브라우저를 변조할 있습니다.

XSS 공격을 방어하는 가장 좋은 방법은 어플리케이션이 모든 header , cookie, query string, form field, hidden field (예를 들면, 모든 parameter ) 대해 유효성 검사를 실시하는 것입니다. 사용자의 입력이 화면에 출력되어 나오는 경우, 사용자의 입력 값을 HTML Entity 변환시켜야만 합니다. 또한 위의 태그들을 HTML으로 인식시키지 않기 위해 스크립트에서는 함수를 지원합니다. 그리고 공개 게시판의 경우, HTML 형식을 지원하는 경우 XSS 잠재적인 위험성이 존재하므로, 이를 중지할 필요가 있습니다.

기본 대책

(1) ASP Script

사용자의 입력에 대해 Server.HTMLEncode함수를 사용하여 HTML태그를 비활성화 시킵니다.

Server.HTMLEncode함수를 사용하여 HTML태그를 변환합니다.

<%= Server.HTMLEncode(<script>alert(XSS Test);<script>) %>

위의 결과 tag들이 비활성화 됩니다.

(2) JSP Script

HTML코드의 시작을 알리는 < 대해서 &lt; 으로 변환시키는 방법입니다.

/% less than (<) character &lt; 으로 변환시킵니다. %/

String userInput = request.getParameter(keyword);

user_input = user_input.replaceAll(“’”, \’”);

(3) PHP Script

PHP 내장함수 가운데 입력 문자열에 대해서 HTML코드를 변환시켜주는 htmlentities() 사용하여 XSS 막습니다.

<?

$str = "A 'quote' is <b>bold</b>";

echo htmlentities($str);

// 출력: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

?>

이것또한 간단 하게 기본적인 부분만 처리 해주어도 상당부분 방어가 가능합니다.

조금 귀찮더라도 이정도 처리는 해주어야 하지 않을까 합니다.

 

복사http://blog.naver.com/pjhpjh5827/60166951893

SQL2008버젼 부터의 로그 축소방법이 공유된 것이 없어 글을 올립니다.

아래의 쿼리로 보통 로그파일의 용량을 축소하지만,
WITH TRUNCATE_ONLY, WITH NO_LOG 옵션은 SQL2008 이후 버젼에서는 지원되지 않습니다.

BACKUP LOG MNET_BIlL_DB WITH TRUNCATE_ONLY 를 실행하면 아래와 같은 에러가 발생합니다.
'TRUNCATE_ONLY'은(는) 인식할 수 없는 BACKUP 옵션입니다.

#기존 사용 방법
-- 트랜잭션로그파일최소의단위로축소
BACKUP LOG MNET_BIlL_DB WITH TRUNCATE_ONLY

-- 트랜잭션로그파일을삭제

BACKUP log MNET_BIlL_DB WITH NO_LOG

-- 트랜잭션로그파일을10메가로생성

DBCC SHRINKFILE (MNET_BIlL_DB_log, 10)

SQL2008 이후 버젼부터는 아래의 방법으로 해결하시면 됩니다.
-- 복구모델을 SIMPLE로 변경 후 SHRINKFILE을 이용해 로그를 삭제 후 다시 복구모델을 FULL로 변경

EX)
EXEC sp_helpdb MNET_BIlL_DB
go

--namesize

--MNET_BIlL_DB667904 KB

--MNET_BIlL_DB_log770752 KB

-- 복구모델을변경

ALTER DATABASE MNET_BIlL_DB SET RECOVERY SIMPLE

go

-- 로그를잘라낸다.

DBCC SHRINKFILE(MNET_BIlL_DB_log)

go

EXEC sp_helpdb MNET_BIlL_DB

go

-- 축소되었다.

--namesize

--MNET_BIlL_DB667904 KB

--MNET_BIlL_DB_log 576 KB

-- 복구모델을변경

ALTER DATABASE MNET_BIlL_DB SET RECOVERY FULL

go


아래는 트랜잭션 로그 축소 참고 링크입니다.
http://www.sqler.com/index.php?_filter=search&mid=bColumn&search_target=title&search_keyword=2008&document_srl=347242
http://www.sqler.com/index.php?_filter=search&mid=bColumn&search_target=title&search_keyword=%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98&document_srl=366033
http://www.sqler.com/index.php?_filter=search&mid=bColumn&search_target=title&search_keyword=%EB%A1%9C%EA%B7%B8&document_srl=105214
http://www.sqler.com/index.php?_filter=search&mid=bColumn&search_target=title&search_keyword=%EB%A1%9C%EA%B7%B8&document_srl=129640

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

Session 관리 ( Inproc,StateServer,SQL Server )  (0) 2013.06.14
mssql 2008 로그 축소  (0) 2013.04.29
MS SQL 버전 확인 법  (0) 2012.10.19
MSSQL 2008 로그 축소 방법  (0) 2012.09.11
MS SQL 외래키 지정  (0) 2012.09.10

+ Recent posts