Experience
SQL Injection 방지 / HTML Tag 방지처리 (basepage)
aromacrony
2017. 4. 23. 23:50
basepage내에 해당 코드 삽입
#region :Page_Init Event
/// <summary>
/// 서비스명 : Page_Init 이벤트 메서드.
/// 서비스내용 : 페이지로딩시 초기화 작업을 수행하는 이벤트 메서드 입니다.
/// </summary>
private void Page_Init(object sender, System.EventArgs e)
{
_pageUtility = new AppPageUtility(this);
_typeUtility = new AppTypeUtility();
_log = new AppLog();
_bwm = new AppBWM();
_portalUser = new AppPortalUser();
////////////////////////////////////////////////////////////
///QueryString 과 form 내에 불법적인코드가 삽입되었는지 확인
////////////////////////////////////////////////////////////
this.CheckQueryString(Request);
}
#endregion
#region :SQL Injection 방지 / HTML Tag 방지처리
/// <summary>
/// 서비스명 : CheckQueryString 메서드.
/// 서비스내용 : QuertString 을 체크한 후 잘못되었으면 페이지를 표시하지 않습니다.
/// </summary>
/// <param name="QueryString">QueryString 컬렉션입니다.</param>
//public void CheckQueryString(System.Collections.Specialized.NameValueCollection queryString)
protected void CheckQueryString(HttpRequest poRequest)
{
System.Collections.Specialized.NameValueCollection queryString = poRequest.QueryString;
System.Collections.Specialized.NameValueCollection formString = poRequest.Form;
bool bCheck = true;
// string sMessage = "";
string[] allRequest;
// QueryString 체크
// HTTP 쿼리 문자열 변수의 컬렉션을 가져옵니다.
allRequest = queryString.AllKeys;
for (int i=0; i < allRequest.Length; i++)
{
if (!this.CheckCharacter(queryString.GetValues(allRequest[i])))
{
bCheck = false;
break;
}
}
if (!bCheck)
{
HttpContext.Current.Response.End();
}
bCheck = true;
// Form 체크
// HTTP 요청의 컨텐트 형식이 application/x-www-form-urlencoded 또는 multipart/form-data인 경우에만 채워집니다.
allRequest = formString.AllKeys;
for (int i=0; i < allRequest.Length; i++)
{
if (!this.CheckCharacter(formString.GetValues(allRequest[i])))
{
bCheck = false;
break;
}
}
if (!bCheck)
{
HttpContext.Current.Response.End();
}
}
protected bool CheckCharacter(string[] psCheck)
{
foreach(string sCheck in psCheck)
{
if (!this.CheckCharacter(sCheck)) return false;
}
return true;
}
/// <summary>
///
/// </summary>
/// <param name="psCheck"></param>
/// <returns></returns>
protected bool CheckCharacter(string psCheck)
{
string[] sCheckCharacter = new string[]{"<","'","--","/*","*/"};
foreach(string sTemp in sCheckCharacter)
{
int iTemp = -1;
string sCheck = psCheck;
iTemp = sCheck.IndexOf(sTemp.ToUpper());
if(iTemp != -1)
{
string sMsg ="[ "+ sTemp + " ]는 해킹방지를 위하여 허용되지 않는 문자입니다.\n" ;
sMsg +=" 사용하신 문자가[']이신 경우는 데스크탑 키보드기준으로 왼쪽 Tab 키 위에 있는[`]로 대체 사용가능합니다";
PageUtility.AlertMessage(sMsg,true,false,"history.back();");
return false;
}
}
return true;
}
#endregion