[SQL 주입] 블라인드 의 효율 을 어떻게 향상 시 킵 니까?

1192 단어
0x 01 SQL 주입 의 블라인드
SQL 주입 하면 안전 한 친구 들 이 다 알 고 있 을 거 라 고 생각 합 니 다. 그럼 오늘 은 블라인드 효율 을 높이 는 방법 에 대해 이야기 해 보 겠 습 니 다.맹 주 는 크게 세 가지 로 나 뉜 다.
불 맹 주
시간 맹 주
잘못 보고 하 다.
효율 을 높이다
보통 블라인드 가 효율 을 높이 면 두 가지 가 있어 요.
조회 횟수 를 줄이다.
조회 의 정확성 을 높이다.
그럼 첫 번 째 방법 은 이분법 입 니 다.
이분법 은 데이터 구 조 를 배 운 사람 이 모두 알 고 있 습 니 다. 문제 풀이 방향 은 다음 과 같은 python 코드 로 소개 하 겠 습 니 다.
def inject(a, list, start, end):
        if start == end:
                return list[start]
        if ord(a) > list[(start+end)/2]:
                return inject(a, list, end/2, end)
        return inject(a, list, start, end/2)

여기 서 상술 한 코드 를 설명 하 겠 습 니 다.여기 a 는 검색 할 문자 입 니 다. list 는 a - zA - Z0 - 9 와 비교 할 문자열 입 니 다. start 는 시작 이 고 end 는 끝 입 니 다.함수 에 들 어가 면 start 가 end 설명 과 같 으 면 그 문 자 를 되 돌려 줍 니 다. a 의 ascii 값 이 list 의 중간 문자 인 ascii 보다 크 면 a 의 진정한 값 이 list 의 후반 부 에 있 음 을 설명 합 니 다. 따라서 start 는 end / 2 로 변 합 니 다.그렇지 않 으 면 a 의 값 이 list 의 앞부분 에 있 기 때문에 end 는 end / 2 가 됩 니 다.
두 번 째 방법 은 바로 비트 알고리즘 이다.
원 리 는 매번 조회 할 때마다 한 자 리 를 확정 하 는 것 이다. 이런 문 자 는 8 번 만 있 으 면 확정 할 수 있다. 비트 연산 자 & 를 이용 하여 빈 (ascii (a) & 1, 2, 4, 8, 16... 을 통 해 8 비트 바 이 너 리 를 얻 을 수 있다.

좋은 웹페이지 즐겨찾기