POST를 사용하든 GET을 사용하든 항상 hash_hmac
을 사용하여 페이지의 중요한 필드에 서명 할 수 있습니다. 이렇게하면 다른 사람이 추측 할 수없는 서명을 추가하여 사람들이 가치를 감지하지 못하게 변경할 수 없습니다.
이것은 또한 고정 기술로 인해 CSRF를 더 어렵게 만들지 만 불가능하지는 않습니다. 그것은 "피들러"가 더 어려워 질 수있는 또 다른 기술입니다.
다음 함수는 주어진 사람 ID에 소금과 서명을 추가하여 보안 된 문자열을 구성합니다.
define('MY_SECRET', 'an unguessable piece of random text');
function getSecurePersonId($personId)
{
$rnd = uniqid("$personId-", true);
$sig = hash_hmac('sha1', $rnd, MY_SECRET);
return "$rnd-$sig";
}
당신은
$.post()
또는
$.get()
의 데이터로 전달할 자바 스크립트
getSecuredPersonId()
의 출력을 전달할 것
; 게시 btw 것이 좋습니다.
양식이 제출되면 요청자의 ID는 신청 방법에 따라 $_GET['personID']
또는 $_POST['personID']
이됩니다. 지정된 값을 확인하려면, 당신은이 기능을 통해 그것을 실행 값이 올바르게 서명
function validateSecurePersonId($securePersonId)
{
if (3 != count($parts = explode('-', $securePersonId))) {
return false;
}
// reconstruct the signed part
$rnd = "{$parts[0]}-{$parts[1]}";
// calculate signature
$sig = hash_hmac('sha1', $rnd, MY_SECRET);
// and verify against given signature
return $sig === $parts[2] ? $parts[0] : false;
}
경우, 그것은 당신이 시작 원래 사람의 ID를 반환합니다. 실패 할 경우 false
을 반환합니다.
작은 시험 :
$securePersonId = getSecurePersonId(123);
var_dump($securePersonId);
if (false === validateSecurePersonId($securePersonId)) {
// someone messed with the data
} else {
// all okay
}
내가 최고는 항상 데이터를 암호화 할 수 있으며, 당신이 그것을받을 때 해독해야한다고 생각한다. – jcho360