php decode encode - Passando stringhe con codifica Base64 nell'URL




5 Answers

No, avresti bisogno di url-encoding, poiché le stringhe base64 possono contenere i caratteri "+", "=" e "/" che potrebbero alterare il significato dei tuoi dati - assomigliano a una sottocartella.

Di seguito sono riportati i caratteri base64

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
utf8 to

È sicuro passare stringhe codificate in base Base64 tramite i parametri GET?




@joeshmo O invece di scrivere una funzione di supporto, potresti semplicemente urlencodare la stringa codificata base64. Ciò farebbe esattamente la stessa cosa della tua funzione di supporto, ma senza la necessità di due funzioni extra.

$str = 'Some String';

$encoded = urlencode( base64_encode( $str ) );
$decoded = base64_decode( urldecode( $encoded ) );



Sì e no.

Il set di caratteri base di base64 può in alcuni casi entrare in collisione con le convenzioni tradizionali utilizzate negli URL. Ma molte delle implementazioni di base64 ti permettono di cambiare il set di caratteri per abbinare meglio gli URL o anche di urlsafe_b64encode() uno (come urlsafe_b64encode() ) di Python.

Un altro problema che potresti incontrare è il limite della lunghezza dell'URL o piuttosto - la mancanza di tale limite. Poiché gli standard non specificano la lunghezza massima, i browser, i server, le librerie e altri software che funzionano con il protocollo HTTP potrebbero definire i propri limiti. Puoi dare un'occhiata a questo articolo: Domande frequenti sul WWW: Qual è la lunghezza massima di un URL?




Non penso che questo sia sicuro perché, ad esempio, il carattere "=" è usato nella base grezza 64 e viene anche usato per differenziare i parametri dai valori in un GET HTTP.




Sì, è sempre sicuro. ovviamente base64 contiene: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= ma una stringa codificata in base64 di solito non ha + . + sarà convertito in uno spazio vuoto, generando una stringa decodificata errata. / è sicuro in una coppia di parametri get. = è sempre alla fine della stringa codificata base64 e il lato server può risolvere direttamente = .




Related