한글도메인 또는 한글파일명을 가지고 있는 경우 


BLOCKED: URL is not RFC compliant!


위와같은 블락이 됩니다. 하여 아래와 같이 패치하면 간단히 해결 됩니다.


우리나라는 한글 사용으로 인해 RFC 규약에 맞지 않습니다.


한글 사용시에는 WebKnight 설정에서 다음의 사항들을 체크해보시기 바랍니다.

URL Scanning → Deny Url HighBitShellcode 옵션 해제
→ RFC Compliant Url 옵션 해제
→ RFC Compliant HTTP Url 옵션 해제
Referer → Referer URL RFC Compliant 옵션 해제
→ Referer URL RFC HTTP Compliant 옵션 해제
→ Deny Referer High Bit Shellcode 옵션 해제
Querystring → Deny Querystring High Bit Shellcode 옵션 해제

.net 확장자 변경 .NET 2012/03/29 14:13


visual studio 개발툴 설정 --------------------------


이 기능은 이미 Visual Studio 2005 부터 제공이 되고 있었습니다. ( 2003 버전은 확인해 보지 못해서, 설치되신 분 알려주세요.. )
 
아래와 같이, Visual Studio 의 도구->옵션->텍스트 편집기->파일 확장명 에서 추가할 수 있습니다.


위와 같이 원하는 확장명을 입력하고, 다시 .umcx 페이지를 열게 되면, 아래와 같이 일반적인 웹페이지를 작성하는 것과 같이 이쁜 컬러와 자동완성 기능을 사용할 수 있습니다.



다음은 web.config 의 httpHandlers 섹션에 다음과 같이 작성합니다.
<httpHandlers>
         <add path="*.umcxverb="*type="System.Web.UI.PageHandlerFactoryvalidate="true"/>

여기에서 위의 Type 에 등록된 클래스를 조금 짚고 넘어 가겠습니다.
PageHandlerFactory 는 IHttpHandlerFactory 를 구현한 클래스 입니다.
이 인터페이스는 IHttpHandler 를 리턴하는 GetHandler 메서드를 구현하기만 하면 됩니다.
public IHttpHandler GetHandler(HttpContext context,
        string requestType, String url, String pathTranslated)
 
이 인터페이스를 구현한 클래스를 web.config 의 httpHandlers 에 등록하게 되면 좀더 유연하게 가령, 요청이 get , post 방식에 따라 서로 다른 HttpHandler 를 반환 할 수 있습니다.
IIS 에서 확장자 매핑하면서 get,post 등 요청 방식을 지정할 수 있게 되어있습니다.
하지만 위 인터페이스를 활용하여 요청방식에 따른 각기 기능을 하나의 클래스에 넣을 수 도 있구요, 페이지 요청 방식에 따라 서로 상이한 페이지를 보여 줄 수 도 있습니다.
다음 기회 언젠가 좀 더 자세히 파 보도록 하겠습니다.
 
다시 원점으로 돌아와서,
하지만 이것만으로 끝이 아니랍니다.
우라가 작성한 페이지를 컴파일하고 컴파일 하는 동안 코드를 생성하는데 사용되는 빌드 공급자를 정의해 주어야 합니다.
 
이것또한 최상위 web.config 에 다음과 같이 정의되어 있지요
<buildProviders>
        <add extension=".aspxtype="System.Web.Compilation.PageBuildProvider" />
        <add extension=".ascxtype="System.Web.Compilation.UserControlBuildProvider" />
        <add extension=".mastertype="System.Web.Compilation.MasterPageBuildProvider" />
        <add extension=".asmxtype="System.Web.Compilation.WebServiceBuildProvider" />
        <add extension=".ashxtype="System.Web.Compilation.WebHandlerBuildProvider" />
        <add extension=".soaptype="System.Web.Compilation.WebServiceBuildProvider" />
        <add extension=".resxtype="System.Web.Compilation.ResXBuildProvider" />
        <add extension=".resourcestype="System.Web.Compilation.ResourcesBuildProvider" />
        <add extension=".wsdltype="System.Web.Compilation.WsdlBuildProvider" />
        <add extension=".xsdtype="System.Web.Compilation.XsdBuildProvider" />
        <add extension=".jstype="System.Web.Compilation.ForceCopyBuildProvider" />
        <add extension=".lictype="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".licxtype="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".excludetype="System.Web.Compilation.IgnoreFileBuildProvider" />
        <add extension=".refreshtype="System.Web.Compilation.IgnoreFileBuildProvider" />
</buildProviders>
자주 보던 확장자들이 많이 있지요?
 
<compilation>
</compilation>
Web.config 의 위 섹션이 응용 프로그램의 컴파일을 담당하는 섹션입니다.
우리가 웹사이트를 작성하고 이후 수정된 사항을 복사만 하더라도 컴파일 되어 자동으로 적용되어 지는 미리 컴파일 기능 또한 위 섹션에서 담당하게 되지요~
 
이제 감이 오셨나요?
그럼 우리가 만든 페이지가 컴파일 되도록 하기 위해선 다음과 같이 섹션을 추가해 줍니다
<compilation debug="false">
         <buildProviders>
                  <add extension=".umcxtype="System.Web.Compilation.PageBuildProvider" />
         </buildProviders>
</compilation>
 


'.NET' 카테고리의 다른 글

.net 확장자 변경  (0) 2012/03/29
RegisterClientScriptBlock 과 RegisterStartupScript 의 고찰  (0) 2012/03/28
.net 확장자 변경시 iis 설정  (0) 2012/03/14
c# md5 클래스  (0) 2011/10/21
xml gzip 인코딩 파싱  (1) 2011/06/17
LINQ msdn  (0) 2010/12/10

웹방화벽을 설치하자. 
소프트웨어 적으로 소스적으로  SQL injection 같은 필터링은 완전하지 않다.
물리적인 차단 방법이 최고 ㅎㅎ

공개 프로그램이지만, 윈도우 서버용으로 나온 Webnight 에 관해서 여러 고수님들의 사이트를 참고하여 정리해 본다.
WebKnight.xml  : 각종 환경설정 (일반적인 차단/허용 설정)
Robots.xml        : AQTRONIX 회사에서 직접 차단되는 각종 코드내역 목록들
Log Analysis      : 접근하는 모든 Log 파일들 -> 모니터링 및 Block 부분된 곳 찾을수 있다.

-- 설치부분

1. 웹나이트를 설치한다.
2. 압축파일에 동봉된 xml룰을 C:\Program Files\AQTRONIX Webknight 위치에 복사해서 WebKnight.xml 로 만든다.
3. WebKnight Configuration -> Global Filter Capabilities -> Is Installed As Global Filter 해제 

-- 운영부분

1. WebKnight Configuration -> Incident Response Handling -> Response Log Only [탐지모드]

    - 이 부분은 블럭킹이 됐을때 실제로 블럭킹을 할것인지 로그만 남기고 넘겨줄 것인지 결정하는 부분

    - 차단 모드로 변경할려면 Response Directly 나 Respnose Rediret 옵션을 활성화 한다. (Response Log Only 반드시 체크해제)

    - 차단 모드는 Response Redirect 옵션을 활성화 하여 특정 에러페이지를 표시하는 방법 추천

 
2. WebKnight Configuration -> Headers -> Max Headers

   - 여기서 각종헤더부분에 용량을 결정한다.


 
3. WebKnight Configuration -> URL Scanning -> URL Denied Sequences

   - 여기서 사용하지 않을 경로를 입력해 준다.

   - 예) /admin/ 이런 경로가 들어가 있으면 URL 에서 해당 경로를 사용할수가 없게된다.

 
4. WebKnight Configuration -> Mapped Path -> Allowed Paths

   - 여기서는 사용할 파일경로를 입력해 준다.

   - 웹나이트는 이 옵션을 통해 허용되지 않은 경로에 대한 접근을 모두 차단한다.

 


5. WebKnight Configuration -> Requested File -> Use Denied Files

    - BLOCKED: accessing/running 'test' file

    - 파일이름에 해당 단어가 매칭되면 차단한다.

 
6. WebKnight Configuration -> Requested File -> Denied Extentions

    - 파일 확장자 차단.

  

BLOCKED: URL is not RFC compliant!

-> 경로에 한글이 있으면 블록됨

-> URL RFC Compliant 해제

 

BLOCKED: 'collect' not allowed in User Agent

-> Allblog.net RssSync4 Image Collector 가 이미지를 수집하려 오다 블록됨

-> robots.xml 에서 collect를 삭제

 

BLOCKED: Referrer URL is not RFC compliant!

-> Embedded Web Browser 에서 검색 실패

-> 파라미터 중 한글 차단

예) http://search-srv.webcompass.co.kr/sense/slimband_under.php?affiliate_id=mncast&type=refer&current_engine=naver&reco_param=bms;이지%20투%20디제이@오투매니아다운@biorad@오투매니아다운로드@리듬잇~~

-> Referrer > Referrer URL RFC Compliant > 체크해제

 

 

BLOCKED: Referrer URL is not RFC compliant!

-> daum  신지식 검색 링크에서 url에 공백이 포함되어서 들어옴

-> Referrer > Referrer URL RFC Compliant 해제

  

BLOCKED: Header 'Referer:' too long

-> Embbed 기기로 접속했을 때, Referrer 가 길어져 차단됨

-> Request Limits > Max Headers > Referer 의 크기를 늘려줌

 

BLOCKED: Empty User Agent not allowed

->아이피 조회해보니 구글에 있는 아이피던데.. 어디에 쓰이는 지 몰라.. 처리할 지 고민 중…

  

BLOCKED: User Agent not RFC compliant

-> http://search.empas.com 에서 들어오는것에서 차단됨

-> User Agent에서 Deny User Agent Non RFC 선택해제

  

BLOCKED: 'user-agent: mozilla' not allowed in User Agent

-> Robots.xml 을 열어 Other Bad로 이동해 보면 와 User_Agents_Other_Bad_Sequence 두개 항목이 있는데 이 두곳에서 해당

-> User_Agents_Other_Bad, User_Agents_Other_Bad_Sequence에서 Mozilla 관련된 부분 삭제


BLOCKED: accessing/running 'test.' file

--> Requested File 에서 Denied Fileds 안의 test. 부분 삭제

asp.net 작업을 할때 자바스크립트 같은 Client 전용 스크립트를 웹프로그램 상에 삽입하고자 할때 유용하게 쓰이는 대표적인 놈들이다.

물론 .Net Framwork 1.1 시절때에는
Page.RegisterClientScriptBlock 메소드로 이름을 날렸었는데,

.Net Framework 2.0 이상부터는
ClientScriptManager 클래스로 바뀌었다. ( ClientScriptManager.RegisterClientScriptBlock 메소드 )

매번 작업할때마다 헷갈리는데 이 두 친구들 사이에는 미묘한 차이점이 있다.


1. RegisterClientScriptBlock 메소드는 body 상의 일반 요소가 로드되기 전에 발생
   -- 현재 페이지의 모양이 나오기 전에 빈 공백상태의 뒷 화면위에 경고창이 뜬다.

2. RegisterStartupScript 메소드는 body 상의 요소들이 로드 되고 난뒤 발생
   -- 현재 페이지의 모양그대로 나오고 경고창을 띄울 수 있다.

[주의사항]

다음과 같은 소스 중에서 아래의 RegisterClientScriptBlock  메소드를 수행하고 다음라인에 return 을 꼭 붙여주자.
안 넣으면, 자바스크립트 관련 소스가 제대로 적용되지 않고 Button2_Click 아래의 나머지 관련 소소들이 수행되어 버린다.

    protected void Button2_Click(object sender, EventArgs e)    {

                string script = "<script language='javascript'>alert('삭제할 글을 선택해 주십시오.');</script>";
                ClientScript.RegisterClientScriptBlock(typeof(Page), "ArticlesDelChk", script);
                return;

        ---- 이하 다른 관련 소스 계속 ----
        -------------------------------------
    }



'.NET' 카테고리의 다른 글

.net 확장자 변경  (0) 2012/03/29
RegisterClientScriptBlock 과 RegisterStartupScript 의 고찰  (0) 2012/03/28
.net 확장자 변경시 iis 설정  (0) 2012/03/14
c# md5 클래스  (0) 2011/10/21
xml gzip 인코딩 파싱  (1) 2011/06/17
LINQ msdn  (0) 2010/12/10
이제부터 .joa라는 확장자를 가진 파일을 ASP.DLL이 처리하게끔 설정하는 방법을 알아 보겠습니다.
먼저 IIS를 실행하고 확장자를 바꿔도 실행되게끔 하려는 웹사이트의 등록정보를 아래 그림을 참조하여 열어줍니다.




IIS 등록정보중 홈 디렉터리 텝을 클릭합니다. 홈 디렉터리 텝의 우측하단을 보면 구성버튼이 있습니다. 구성버튼을 인정
사정 보지말고 클릭해 줍니다. 그러면 다음과 같은 화면이 열립니다.


 

여기서 눈치 채신 분들 있을겁니다. 그렇습니다. 추가버튼을 클릭해서 확장명을 새로 등록하시면 되는 겁니다.
그럼 추가버튼을 클릭해 보겠습니다. 다음과 같은 화면이 실행됩니다.


 

여기서 실행파일 찾아보기 버튼을 이용해서 ASP.DLL을 등록해주고 확장명은 .JOA를 등록합니다.
동사는 레디오버튼 중 다음으로 제한 버튼을 클릭하고 GET,HEAD,POST,TRACE를 써 넣습니다.

ASP.DLL이 위치한 디렉터리는 C:\WINNT\system32\inetsrv\ 에서 찾으실 수 있습니다.
모든 사항을 맞게 등록했는지 아래 그림을 참조하시고 맞다면 확인 버튼을 클릭하고 적용을 차례로 누르고 IIS를 빠져나옵니다.


 

모든 과정이 끝났습니다. 이제 이 사이트는 .joa확장자도 처리가 가능합니다. 물론 처리는 asp.dll이 담당한 후 웹서버에
처리된 html을 반환합니다. 

'.NET' 카테고리의 다른 글

.net 확장자 변경  (0) 2012/03/29
RegisterClientScriptBlock 과 RegisterStartupScript 의 고찰  (0) 2012/03/28
.net 확장자 변경시 iis 설정  (0) 2012/03/14
c# md5 클래스  (0) 2011/10/21
xml gzip 인코딩 파싱  (1) 2011/06/17
LINQ msdn  (0) 2010/12/10

크롬이 업데이트 하면서 헤더를 읽는 방법이 틀려 지지 않았나 싶습니다.


IE 파폭등 타 브라우져에서 다운로드 잘되지만 유독 크롬에서만 되질 않아 버그를 찾아 보앗습니다.

결과

첨부파일의 받는 파일이름의 ,(콤마) 를 REPLACE 시켜 주면 간단히 해결 됩니다.

  Header("Content-Disposition: attachment; filename"+FILENAME);

FILENAME 부분을 replace 시켜주면 해결 됩니다. 
mssql split 함수 DB/MS-SQL 2012/01/27 18:02
CREATE FUNCTION [dbo].[arr_split](
 @sText  VARCHAR(max),  -- 대상 문자열
 @str   CHAR(1) = '|',       -- 구분기호(Default '|')
 @idx  INT                       -- 배열 인덱스

)
RETURNS VARCHAR(max)
AS
BEGIN
 DECLARE @word    varchar(max),    -- 반환할 문자
      @sTextData  VARCHAR(600), 
      @num    SMALLINT;
     
 SET @num = 1;
 SET @str = LTRIM(RTRIM(@str));
 SET @sTextData = LTRIM(RTRIM(@sText)) + @str; 
 
 WHILE @idx >= @num
 BEGIN

  IF CHARINDEX(@str, @sTextData) > 0
  BEGIN
   -- 문자열의 인덱스 위치의 요소를 반환
   SET @word = SUBSTRING(@sTextData, 1, CHARINDEX(@str, @sTextData) - 1);
   SET @word = LTRIM(RTRIM(@word));

   -- 반환된 문자는 버린후 좌우공백 제거   
   SET @sTextData = LTRIM(RTRIM(RIGHT(@sTextData, LEN(@sTextData) - (LEN(@word) + 1))))
  END ELSE BEGIN
   SET @word = NULL;
  END
  SET @num = @num + 1
 END
 RETURN(@word);
END

위의 것을 붙여 넣기만 하시면 바로 함수로 사용 가능합니다.

그외의 팁으로 함수만들기가 귀찮으신 분들은...

substring(@File5, 0, charindex('//',@STR)) //이것은 나눈 첫번째
 
ISNULL(substring(@STR,len(@STR)-arindex('//',reverse(rtrim(@STR)))+2,len(@STR)),0) //나눈 두번째 

이런식으로 사용이 가능합니다. 






 
UPDATE ~ SELECT 문 DB/MS-SQL 2012/01/16 17:57

date distribute 
   set right_pv = b
 where userid in (select userid from b)

 

update distribute_cp_temp
   set (parents_id, recomm_id) = (select SPONSORID, INTRODUCORID
                    from dist2 
     where DISTRIBUTORID = distribute_cp_temp.userid);

 

update ddd
   set cyberpoint = (select cybermoney
                         from d
                 where DISTRIBUTORID = ddd.userid);

 

update distribute_cp_temp
   set (parents_name) = (select name
                    from d 
     where DISTRIBUTORID = distribute_cp_temp.userid
       and url is not null);

 
 

update 상품 a
set a.판매개시일 =
                 (select b.판매개시일
                    from tmp_상품판매개시일 b
                   where a.상품코드= b.상품코드
                   )
where a.상품코드 in(select 상품코드 from tmp_상품판매개시일)

 

UPDATE 부점 A
  SET A.영문부점명 = (SELECT 영문부점명
                    FROM 영문부점명 B
                  WHERE A.부점 = B.부점 
                  )
  WHERE EXISTS (SELECT 영문부점명
                    FROM 영문부점명 B
                  WHERE A.부점 = B.부점                      
                )

모바일 웹 스크롤 페이징을 구현 하여 

간단한 방법이지만 추후 활용 성이 있을거 같아 포스팅을 합니당~

jquery 를 이용 하였습니다~

$(document).ready(function (){
$(window).scroll(function (){
if($(window).scrollTop() == $(document).height() - $(window).height()){ //최하단의 위치값과 동일여부
lastPosted(); //스크롤페이징 ajax 호출 스크립트
});

lastPosted(); //스크롤페이징 ajax 호출 스크립트
}); 

위의 것은 안드로이드 에서 test해본 결과 이다. 잘된다~ 아이폰은 높이 갚이 좀 틀리더라구요. 맨하단의 툴바인지 주소창 문제 인지는 모르지만 alert 로 체크하여 높이값을 제설정 해주었습니다.

if($(window).scrollTop() == $(document).height() - $(window).height() - 60 ){ //최하단의 위치값과 동일여부
       lastPosted(); //스크롤페이징 ajax 호출 스크립트


소스를 보시면 지금 현재 높이 값과 스크롤이 최상단의 값을 비교 하여 최하단의 위치 라면. scroll paging ajax 함수 스크립트를 호출 합니다~

저 같은 경우는 게시물의 마지막 인덱스 값을 가지고 판가름 합니다. 물론 없을 경우 DB SP 에서 해당 게시물의 MAX 값을 뽑아서 인덱스를 설정해주는 방식으로 합니다.


예제 소스를 올리겠습니다.

<!--페이징 호출 script-->

 <script type="text/javascript">
  var pstate = 0; //ajax 진행중값

  function lastPostLoad(){   

   if(pstate == 0){ /*진행중이 아닐경우*/
    $("#LodingImage").html('<img src="/images/loading.gif" style="margin:10px 0;"  />');
    pstate == 1; //진행중값으로 변경
    var lastId = 0;
    if($(".list li:last").attr("id")){ //id 값이 있을 
      // window.scrollTo(0, $(window).scrollTop() + 30);
       if (navigator.userAgent.indexOf('iPhone') != -1) 
        {
       setTimeout(scrollTo, 0, 0, $(window).scrollTop() + 30);         //안드로이드 스크롤 아래이동
        }else{
       window.scrollTo(0, $(window).scrollTop() + 30); //아이폰 스크롤 아래이동.
        }     
     lastId = $(".list li:last").attr("id");
    }
    /*ajax 호출*/
    $.ajax({
     type :"POST",
     data : "lastIdx="+lastId+"&count=6+ "파리미터",
     url  : "페이지호출 url",
     success: function (data){
      
      if(data=="false"){
       alert("데이터를 로드 하지 못하였습니다.");
       $("#LodingImage").empty();
       pstate = 0;
      }else if(data == ""){
       alert("더이상 목록이 존재 하지 않습니다.");
       $("#LodingImage").empty();
       pstate = 1;

      }else{

       if($(".list li:last").attr("id")){ //첫실행이 아닐경우 li존재

        $(".list li:last").after(data);

       }else{ //첫실행일 경우li 없음

        $(".list").html(data); 
       }

       $("#LodingImage").empty();
       pstate = 0;
      }
     },
     error: function (){
      alert("파일 접속 오류 잠시후 이용해 주세요.");
      $("#LodingImage").empty();      
      pstate = 0;
     }
    });
   }
  }
  //window.onLoad = lastPostLoad;
 </script>

 <!--end-->

 <ul class="list">
         
    </ul>
  </div>
  <div id="LodingImage"></div>  


제가 사용한 소스 입니다. 간단합니다 ul list 에서 li 를 넣어 줍니다. 위에서 설명한 것과 같이 최상단 index 값의 하위 데이터를 가져와서 넣어주는 방식입니다. 여기서 주의 하셔야 할것이..



  if (navigator.userAgent.indexOf('iPhone') != -1) 
        {
       setTimeout(scrollTo, 0, 0, $(window).scrollTop() + 30);         
        }else{
       window.scrollTo(0, $(window).scrollTop() + 30);
        }     

이부분인데요 이부분은 스크롤을 움직이는 부분입니다. 보시다시피 안드로이드와 아이폰 스크롤 이동 이벤트를 분기 하였구요. 스크롤을 더 아래로 이동시켜 로딩 이미지 라든지 아래 리스팅이 된것을 확인 시켜 주기 위해 스크롤을 좀더 아래로 이동 시켜 주었습니다. 


이상 허접한 스크롤 페이징에 관련된 포스팅 입니다,^^;

 
 

'MobileWeb' 카테고리의 다른 글

모바일 웹 스크롤 페이징  (0) 2011/11/24
모바일 웹 이미지 복사 막기  (0) 2011/02/21

다음 코드는 하나 이상의 특정 테이블에 관련된 모든 저장 프로 시저 (SP)를 찾는 문 입니다. sp_help 및 sp_depends는 항상 정확한 결과를 반환 하지 않더라구요. 2005 2008테스트 해보았습니다.

----Option 1 
SELECT DISTINCT so.name 
FROM syscomments sc 
INNER JOIN sysobjects so ON sc.id = so.id 
WHERE sc. TEXT LIKE '%tablename%' 
----Option 2 
SELECT DISTINCT o.name , o.xtype 
FROM syscomments c 
INNER JOIN sysobjects o ON c.id = o.id 
WHERE c. TEXT LIKE '%tablename%