웹 개발 에서 흔히 볼 수 있 는 보안 구멍 및 피 하 는 방법

1. 안전 공격
    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("&", "&amp");
            source = source.Replace("", "&gt");
            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

좋은 웹페이지 즐겨찾기