security > 모든 사용자 입력값을 체크하는 Function
등록일 : 2017-06-30 14:43
조회수 : 94,058
이번내용은 http://www.taeyo.pe.kr/ 홈페이지에서 발췌한 자료임을 알려드립니다.
요즘 Sql Injection 공격으로 인해 많은 서버 관리자및 개발자들이 고생을 많이 하고 있습니다.
아래 소스는 이런 공격에 대한 차단을 해 주는 소스 입니다.
데이타 베이스 테이블
CREATE TABLE [dbo].[hacking_log](
[board_idx] [int] IDENTITY(1,1) NOT NULL,
[hl_date] [datetime] NULL,
[hl_ip] [varchar](100) COLLATE Korean_Wansung_CI_AS NULL,
[hl_page] [varchar](100) COLLATE Korean_Wansung_CI_AS NULL,
[hl_text] [varchar](2000) COLLATE Korean_Wansung_CI_AS NULL
) ON [PRIMARY]
ASP 소스 코드
TmpHackString = Split("insert,update,select,delete,drop,--,char,exec",",")
strcon="Provider=SQLOLEDB;User ID=sa;Password=;Data Source=서버 아이피;Initial Catalog=연결디비;"
Set objCnn = Server.CreateObject("ADODB.Connection")
objCnn.Open strcon
Function CheckRequestValue(byVal c_value)
tmpValue = trim(Lcase(c_value))
for TmpLoopi = lbound(TmpHackString) to ubound(TmpHackString)
if InStr(tmpValue,TmpHackString(TmpLoopi)) > 0 then
' 해킹 경고 메시지
tmp_HackLog = "의심 문자 : " & TmpHackString(TmpLoopi) & "<br>"
For each Query_Item in Request.QueryString
For i = 1 to Request.QueryString(Query_Item).Count
tmp_HackLog = tmp_HackLog & "Request.QueryString(" & Query_Item & ")(" & i & ") = " & Request.QueryString(Query_Item)(i) & "<br>"
Next
Next
For each Query_Item in Request.Form
For i = 1 to Request.Form(Query_Item).Count
tmp_HackLog = tmp_HackLog & "Request.Form(" & Query_Item & ")(" & i & ") = " & Request.Form(Query_Item)(i) & "<br>"
Next
Next
strSql = " Insert Into hacking_log (hl_date,hl_ip,hl_page,hl_text) values (getdate(),'"&Request.ServerVariables("REMOTE_ADDR")&"'" &_
" ,'"&Request.ServerVariables("URL")&"','"&tmp_HackLog&"') "
set objRs=objCnn.Execute(strSql)
p_html = "접근제한 -- SQL 인젝션으로 판단되어 접근을 제한합니다.(insert,update,select,delete,drop,--) 등등"
response.Write(p_html)
response.end
end if
Next
End Function
For each Query_Item in Request.QueryString
For i = 1 to Request.QueryString(Query_Item).Count
Call CheckRequestValue(Request.QueryString(Query_Item)(i))
Next
Next
For each Query_Item in Request.Form
For i = 1 to Request.Form(Query_Item).Count
Call CheckRequestValue(Request.Form(Query_Item)(i))
Next
Next
넘어오는 QueryString 값을 비교하여 TmpHackString 에 정의한 문자가 존재하면 접근을 제한하는 소스입니다.
위 소스는 헛점이 너무 많아서 저도 사용을 하지 않고 있습니다. 이런방법이 있다는 정도만 알고 계시면 될거 같습니다.