URL 매개변수의 변조 감지

목적


  • URL에 사용자 별 매개 변수를 포함하고 게시하고 싶습니다.
  • Twitter 등에 게시 될 때 매개 변수가 변조되었는지 확인하고 싶습니다
  • 위조 감지를 위해 DB와 같은 메커니즘을 사용하고 싶지 않습니다.
  • (단순히 매개 변수가 다시 작성되지 않았는지 확인하는 것이 좋습니다)


  • 사용 예



    위의 목적이 이해하기 어렵다고 생각하기 때문에, 실례를 설명합니다.
    3점 리더 증후군 검사기 라는 웹 서비스를 만들었습니다.
    자신의 과거 트윗에 얼마나 3점 리더(...)가 사용되고 있는지를 볼 수 있습니다.
    Twitter에 대한 공유 기능이 구현되어 있으며, 자신의 분석 결과를 동적 OGP 이미지로 공유할 수 있습니다.

    사용자별 공유 URL: htps : // 씨텐-아아 r. 뭔가. 코 m / 샤레 / 미사 _ Fd / 32 / 169 / FX174

    공유 URL은 다음과 같이 구성됩니다.
    /share/{사용자 이름}/{스코어 분자}/{스코어 분모}/{해시 값}

    매개 변수에서 변조를 감지하면 기본 OGP 이미지가 표시됩니다.
    변조된 공유 URL: htps : //씨 텐-아아 r. 뭔가. 코 m / 샤레 / 미사 _ Fd / 100/169 / FX174

    이 사용자 이름, 점수 분자 및 점수 분모 값을 사용하여 동적 OGP 이미지를 만들지 만,
    변조 감지 메커니즘을 넣지 않으면 사용자가 자신의 점수를 가장할 수 있습니다.
    분석 결과를 서버에 저장하지 않으므로 실제 데이터와 비교할 수 없습니다.
    그 때문에, 말미에 해시치를 부가해 대책하고 있습니다.

    구현 개요



    대략적으로, 다음과 같은 구조를 채용하고 있습니다.
    URL 생성 시 : 공유 URL 생성 시 '사용자 이름', '스코어 분자', '스코어 분모', '해시 문자열'을 사용하여 해시 값 생성
    변조 확인 시: '사용자 이름', '스코어 분자', '스코어 분모', '해시 값'이 변조되지 않았거나 '해시화 문자열'을 사용하여 확인

    구현 세부사항



    URL 생성시



    아래와 같은 함수를 사용해, 파라미터로부터 해시를 작성하고 있습니다.
    public static function generateShortHash($screenName, $matchCount, $totalCount, $algo = 'CRC32') {
        $hashSource = $screenName . "/" . $matchCount . "/" . $totalCount . "/STRING_FOR_HASHING";
        return strtr(rtrim(base64_encode(pack('H*', hash($algo, $hashSource))), '='), '+/', '-_');
    }
    

    짧은 해시를 만드는 방법은 아래의 기사를 참고로 했습니다. 고마워요.
    h tps:// 퀵했다. 작은 m/코리 ym/있어 MS/그림 FC1C419 그림 4b7772b65c0

    변조 체크 시



    위의 함수를 사용하여 전송 된 해시 값이 일치하는지 확인합니다.
    일치하는 경우 동적 OGP 이미지를 생성하고 일치하지 않으면 기본 정적 OGP 이미지를 공유 URL의 OGP 이미지로 지정합니다.

    참고 페이지



    PHP로 짧은 해시

    좋은 웹페이지 즐겨찾기