Dette spørgsmål er blevet stillet meget, med forskellige ordvalg (hvilket gør det svært at sige, "Søg bare efter det!"). Dette faktum foranledigede et blogindlæg med titlen, The Omfattende vejledning til URL-parameterkryptering i PHP .
Hvad folk vil gøre her
Hvad folk bør gøre i stedet
Forklaring
Typisk vil folk have korte tilfældigt udseende URL'er. Dette giver dig ikke meget plads til at kryptere og derefter godkende det databasepost-id, du ønsker at sløre. Hvis du gør det, vil det kræve en minimumslængde af URL på 32 bytes (for HMAC-SHA256), hvilket er 44 tegn, når det er kodet i base64.
En enklere strategi er at generere en tilfældig streng (se random_compat
for en PHP5-implementering af random_bytes()
og random_int()
for at generere disse strenge) og referer til den kolonne i stedet.
Desuden er hashids brudt ved simpel kryptoanalyse. Deres konklusion lyder:
Det angreb, jeg har beskrevet, er væsentligt bedre end et brute force-angreb, så fra et kryptografisk synspunkt anses algoritmen for at være brudt, det er ret nemt at genvinde saltet; gør det muligt for en angriber at køre kodningen i begge retninger og ugyldiggør egenskab 2 for en ideel hashfunktion.
Stol ikke på det.