본문 바로가기

Development/ASP

웹보안관련-일본 ASP 개발시 처리방법


---------------- 1. 입력 최대값의 설정 ----------------

【적용 항목】

· 형식 입력값(input type=text, textarea)를 받는 항목

데이타베이스상 문제 없어도 서버 리소스가 고갈하거나 브라우저가 응답 없이

되거나, SQL발행시에 오류가 될 가능성이 있기 때문.

 

【체크예】

Function checkLength(targetString, maxLength)

 If LenB(targetString) > maxLength Then

  checkLength = False

 Else

  checkLength = True

 End If

End Function

 

【사용예】

<%

Dim name

Dim msg

If Not checkLength(Request.Form("name"), 20) Then

 ' ng case.

 msg = "name의 길이를 20문자(전각10문자)이내에 설정해 주십시오"

Else

 ' ok case.

End If

%>

 

<%

Function hlen(rstr) ' Byte단위 길이체크
  
 dim j
 dim tlen

 j = 0
 tlen = 0
 If Not IsNull(rstr) Then
  On Error Resume Next
   for j = 1 to len(rstr)
   
    if asc(mid(rstr, j, 1)) <= 0 then
     tlen = tlen + 2
    else
     tlen = tlen + 1
    end If
    If Err.Number <> 0 Then
     Exit For
    End If
   next
  If Err.Number <> 0 Then
   tlen =lenb(rstr)
  End If
  On Error Goto 0
 End If
 
 hlen= tlen
End Function

%>

- javascript

 

function textarea_limite(aro_name,ari_max) {

   var ls_str     = aro_name.value;
   var li_str_len = ls_str.length;
   var li_max      = ari_max;
   var i           = 0;
   var li_byte     = 0;
   var li_len      = 0;
   var ls_one_char = "";
   var ls_str2     = "";

   for(i=0; i< li_str_len; i++) {
   ls_one_char = ls_str.charAt(i);
   if (escape(ls_one_char).length > 4) li_byte += 2;
   else li_byte++;
   if (li_byte <= li_max) li_len = i + 1;
   }
   if(li_byte > li_max) {
   alert("内容は、全角"+parseInt(parseInt(li_max)/2)+"文字以内で入力してください。");
   ls_str2 = ls_str.substr(0, li_len);
   aro_name.value = ls_str2;
   }
   aro_name.focus();

}

 

---------------- 2. HTML표시 ----------------

【적용 개소】

· POST/GET/COOKIE의 값을 표시하는 항목

 ex: 확인 형식, 「∼씨, 어서오십시오」의 표시등

· 데이타베이스부터 취득한 값을 표시하는 항목

 ex: 일람표시/상세 표시, 기타

※ HTML표시를 동적에 하는 항목에서는 전부 행할 것.

 

【함수의 예】

' 인코드 실시 // 원칙, HTML표시시에 인코드를 행하는 것

Function htmlEncode(originalString)

 Dim displayString

 

 ' 「<」「>」「&」「"」이 인코드 된다

 displayString = Server.HTMLEncode(originalString)

 

 ' 기타의 치환 for example:

 ' 「'」의 인코드

 displayString = Replace(displayString, "'", "&#039;")

 ' 개행 변환(필요에 따라)

 displayString = Replace(displayString, vbCrLf, "<br/>")

 

 htmlEncode = displayString

End Function

 

【사용예】

<%

Dim name

name = Request.Form("name")

%>

Name: <%= htmlEncode(name) %>

 

-JavaScript

function HtmlEncode(text){

 if (text != null) {
  text =  text.replace(/&/g, '&amp').replace(/'/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
 }
 return text;
}

 

 

---------------- 3. SQL입력값 ----------------

【적용 항목】

· 문자열을 SQL로 처리할 때 (DML/QUERY양방)

※ 모든 SQL 

【함수의 예】

Function mssqlEscapeString(originalString)

 Dim valueString

 valueString = Replace(originalString, "'", "''")

 mssqlEscapeString = valueString

End Function

 

【사용예】

<%

Dim key, value

key = Request.Form("key")

value = Request.Form("value")

 

Dim sql

sql = "INSERT INTO table (key, value) VALUES ('" & mssqlEscapeString(key) & "', '" & mssqlEscapeString(value) & "')"

 

' other process the following...

%>

 

---------------- 4. 반각 카다카나의 변환 ----------------

【적용 개소】

· 형식 입력치(input type=text, textarea)를 받는 항소

반각 카다카나는 전각 카다카나로 변환

 

【변환 함수의 예】

Function han2zen(originalString)

 Dim bobj

 Set bobj = Server.CreateObject("basp21")

 han2zen = bobj.HAN2ZEN(originalString)

 Set bobj = Nothing

End Function

 

【사용예】

<%

Dim name

name = han2zen(Request.Form("name"))

' other process the following...

%>

 

---------------- 5. 형식치의 encoding ----------------

【적용 항목】

·<input type="hidden">에 값을 유지하는 개소등

※ 유저 입력을 hidden에 유지하는 경우에는 필수

 

【인코드/디코더 함수의 예】

' 인코드 실시

Function formEncode(originalString)

 Dim bobj

 Set bobj = Server.CreateObject("basp21")

 formEncode = bobj.Base64(originalString, 4)

 Set bobj = Nothing

End Function

 

' 디코더 실시

Function formDecode(encodeString)

 Dim bobj

 Set bobj = Server.CreateObject("basp21")

 formDecode = bobj.Base64(encodeString, 5)

 Set bobj = Nothing

End Function

 

【사용예】

· 입력쪽

<%

Dim name

name = Request.Form("name")

%>

<form>

<input type="hidden" value="<%= formEncode(name) %>">

</form>

 

· 처리쪽

<%

Dim name

name = formDecode(Request.Form("name"))

' other process the following...

%>

 

---------------- 5. 전각 카타가나체크 ----------------

 

Asp 함수

<%

 Function Fn_Chk_Japan_Zen(tmpstr)
'  Const cCode = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポァィゥェォャュョッヮヵヶー 0123456789・"

'  Dim ChkString
'  Dim ChkCharString
'  Dim IsChkString
'  ChkString  = cCode
'  IsChkString = true
'  For jk= 1 To Len(tmpstr)
'   ChkCharString = Mid(tmpstr,jk, 1 )
   'Response.write "nChar [" & nChar & "] InStr(Str,nChar) [" & InStr(Str,nChar) & "<BR>"
 '  If InStr(ChkString,ChkCharString) = 0 Then
  '  IsChkString = False
  '  Exit For  
  ' End If
  'Next
  'Fn_Chk_Japan_Zen = IsChkString

 

  Fn_Chk_Japan_Zen = Fn_RegExp_Chk_Japan_Zen("[^ァ-ヶ0-9ー・ ]", tmpstr)


 End Function

 

 

 Function Fn_RegExp_Chk_Japan_Zen(Pattern, Str)
  Dim RegExp
  SET RegExp = New RegExp

  RegExp.Pattern = Pattern
  RegExp.IgnoreCase = True

  'RegExpTest = RegExp.Test(Str)

  SET Matches = RegExp.Execute(str)

  If 0 < Matches.count Then
   Fn_RegExp_Chk_Japan_Zen = false
  Else
   Fn_RegExp_Chk_Japan_Zen = true
  End If
  SET RegExp = Nothing
 End Function


 

%>

 

 

 

JavaScript

<script type="text/javascript">
<!--

  function Fn_ZenK_Check(objItemObject,strTitle){
  if (!Fn_Japan_Zen_Check(objItemObject) ){
   window.alert("「" + strTitle + "」を全角カタカナで入力して下さい!");
  }
 }

 function Fn_Japan_Zen_Check(objItemObject){
  if (objItemObject.value.match(/[^ァ-ヶ0-9ー・ ]+/)){
   return false;
  }
  return true;
 }
//-->
</script>

'Development > ASP' 카테고리의 다른 글

ASP File Download  (0) 2009.06.13
ASP로 데이터베이스 처리 (ADO)  (0) 2009.06.13
페이지 로딩시간 초로 확인하는 방법  (0) 2009.06.13
ServerVariables  (0) 2009.06.13
ASP Sending e-mail with CDO  (0) 2009.06.13