웹 개발 에서 흔히 볼 수 있 는 보안 구멍 및 피 하 는 방법
1. SQL, HTML, JS, OS 명령 주입
2. XSS 크로스 스 크 립 트 공격, 사이트 내 신뢰 하 는 사용 자 를 이용 하여 웹 페이지 에 악성 script 코드 삽입
3. CSRF 크로스 오 버 사이트 에서 위 조 를 요청 하고 신뢰 받 는 사용자 의 요청 으로 위장 하여 신뢰 받 는 사 이 트 를 이용 합 니 다.
4. 디 렉 터 리 빈틈 옮 겨 다 니 기
5. 매개 변수 변경
6. 세 션 납치
2. 공격 방지 조치 총화
1) 사용자 가 입력 한 데 이 터 를 전면적으로 안전하게 검사 하거나 걸 러 냅 니 다. 특히 SQL 이나 XSS 특수 문자 가 포함 되 어 있 는 지 확인 하 십시오.
사용자 가 입력 한 데 이 터 를 검증 합 니 다. 값, 유형, 범위 등 을 포함 하여 검증 컨트롤 로 검증 Required FieldValidator RangeValidator RegularExpressionValidator
이 검사 나 필 터 는 서버 쪽 클 라 이언 트 에서 모두 진행 해 야 합 니 다.클 라 이언 트 서버 는 모두 검증 을 해 야 한다. 클 라 이언 트 는 사용자 체험 을 향상 시 키 기 위해 서버 가 위협 을 효과적으로 방지 할 수 있다.
2) 관리자 권한 의 데이터베이스 연결 을 사용 하지 마 십시오. 동적 연결 sql 을 사용 하지 마 십시오.
3) 기밀 정보 암호 화, 명문 사용 불가
4) 각 페이지 를 불 러 올 때 사용자 의 합 법성 을 판단 한다.
5) 로그 인 후 session 의 민감 한 정 보 는 암호 화 되 어야 하 며 영구적 인 cookies 에 민감 한 정 보 를 저장 하지 않도록 해 야 합 니 다. 중요 한 쿠키 는 http only 로 표 시 됩 니 다.
6) 민감 한 정 보 를 보 낼 때 SSL, POST 방식 을 사용 하고, 가 급 적 신형 웹 HSTS 보안 프로 토 콜 을 사용한다
7) 사용자 에 게 이상 한 상세 정 보 를 직접 던 지지 말고 우호 적 인 페이지 로 돌아 가 민감 한 정 보 를 보지 않도록 한다.
8) 서버 와 네트워크 의 인터페이스 에 방화벽 을 설치 하여 외부 사용자 가 서버 에 대한 검색 과 탐 사 를 차단 합 니 다.
9) 사이트 배경 접근 권한 을 제한 합 니 다. 예 를 들 어 공공 네트워크 IP 가 배경 에 접근 하 는 것 을 금지 합 니 다.종업원 의 약 한 구령 사용 을 금지 하 다.
10) windows 의 8.3 형식 기능 을 닫 습 니 다.DOS 시스템 에서 명령 하 는 방식 은 8.3 형식 입 니 다. 즉, 파일 이름 은 8 자 를 초과 하지 않 고 확장 자 는 3 자 를 초과 하지 않 습 니 다.같다exe 。
현재 윈도 시스템 의 파일 이름 길 이 는 최대 255 글자 에 달한다.
11) 민감 한 페이지 나 디 렉 터 리 의 접근 권한 을 제한 합 니 다.
12) 프로젝트 발표 전에 IBM appscan, UnisWebScanner 등 구멍 스 캔 소프트웨어 를 사용 하여 안전성 을 평가 합 니 다.
보안 구멍 및 방지:
1. sql 주입 구멍 1. 프레임 에 유해 한 문구 와 기호 에 대한 여과 가 내장 되 어 있 습 니 다. 예 를 들 어 insert 'update 는 기본 클래스 에서 여과 합 니 다. 이런 유형 은 관심 을 가지 지 않 아 도 자주 사용 하 는 공격 을 피 할 수 있 습 니 다.
///
/// Sql
///
///
///
public static string SqlFilter(string source)
{
if (string.IsNullOrEmpty(source))
{
return "";
}
//
source = source.Replace("'", "''");
source = source.Replace("\"", "");
source = source.Replace("&", "&");
source = source.Replace("", ">");
source = source.Replace("delete", "");
source = source.Replace("update", "");
source = source.Replace("insert", "");
// ,
source = source.Replace(";", ";");
//
source = source.Replace("(", "(");
source = source.Replace(")", ")");
/////////////// , ////////////////////
//
source = source.Replace("Exec", "");
source = source.Replace("Execute", "");
//
source = source.Replace("xp_", "x p_");
source = source.Replace("sp_", "s p_");
// 16
source = source.Replace("0x", "0 x");
return source;
}
2. 매개 변수 화 방식 의 할당 을 꾸준히 사용 합 니 다. 3. 사용자 에 게 이상 한 상세 정 보 를 직접 던 지지 말고 우호 적 인 페이지 로 돌아 가 사용자 가 데이터 베 이 스 를 보 는 것 을 방지 하고 Web. Config 의 Custom Errors 를 닫 았 을 때 보이 지 않 을 수 있 습 니 다. 2. XSS 는 CSS - Cross Site Script 크로스 스 크 립 트 공격 이 라 고도 합 니 다. 1. 사용자 의 입력 을 정리 하고 js 코드 를 걸 러 내 며 특수 문 자 를 걸 러 냅 니 다. [1] < > (괄호) [5] ;(분점) [2] "(따옴표) [6] () (괄호) [3] '(작은 따옴표) [7] & (& 기호) [4]% (백분율 기호) [8] + (플러스) 2. HttpUitility 및 AntiXSSLibrary 라 이브 러 리 의 방법 으로 html 코드 를 처리 합 니 다.
이. lblName. Text = Encoder. HtmlEncode ("alert ('OK');");
부호화 방법
필드 사용
HtmlEncode(String)
신뢰 할 수 없 는 HTML 코드.
HtmlAttributeEncode(String)
신뢰 할 수 없 는 HTML 속성
JavaScriptEncode(String)
신뢰 할 수 없 는 입력 을 JavaScript 에서 사용 합 니 다.
UrlEncode(String)
신뢰 할 수 없 는 URL
VisualBasicScriptEncode(String)
VBScript 에서 신뢰 할 수 없 는 입력 사용
XmlEncode(String)
신뢰 할 수 없 는 입력 은 XML 출력 에 사 용 됩 니 다.
XmlAttributeEncode(String)
신뢰 할 수 없 는 입력 을 XML 속성 으로 사용 합 니 다.
3. 사용자 정 보 를 MD5 로 암호 화
#region MD5
///
/// MD5
///
///
/// MD5
public static string GetMd5Hash(string Text)
{
MD5 md5 = MD5.Create();
byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(Text));
StringBuilder builder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
builder.Append(data[i].ToString("x2"));
}
return builder.ToString();
}
///
/// MD5
///
///
///
/// True, False
public static bool VerifyMd5Hash(string Text, string TextHash)
{
string hash = GetMd5Hash(Text);
StringComparer comparer = StringComparer.OrdinalIgnoreCase;
if (0 == comparer.Compare(hash, TextHash))
{
return true;
}
else
{
return false;
}
}
#endregion
4. 페이지 를 불 러 올 때 사용자 의 로그 인 여 부 를 판단 하고 로그 인 하지 않 으 면 로그 인 인터페이스 로 이동 하 며 각 페이지 는 기본 클래스 BaseControl 을 계승 합 니 다.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//
if (CurrentUser == null)
{
string request = System.Web.HttpContext.Current.Request.Headers.Get("X-Requested-With");
if (string.Compare(request, "XMLHttpRequest", true) == 0)
{
filterContext.Result = new JsonResult { Data = " , !" };
filterContext.HttpContext.Response.ContentType = "text/plain;charset=UTF-8";
filterContext.HttpContext.Response.Status = "403 Internal Server Error";
filterContext.HttpContext.Response.StatusCode = 403;
}
else
{
filterContext.Result = new RedirectResult("~/Login/SessionOutTime");
}
}
}
참조:
웹 의 취약 성: 각종 주입, 공격
웹 개발 에서 흔히 볼 수 있 는 몇 가지 빈틈 해결 방법
PHP 개발 에서 흔히 볼 수 있 는 보안 문제 에 대한 상세 한 설명 과 해결 방법 (예 를 들 어 Sql 주입, CSRF, Xss, CC 등)
다음으로 전송:https://www.cnblogs.com/xiaochun126/p/5113371.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.