Stavo cercando alcuni esempi di rilevamento automatico delle impostazioni internazionali poiché dovevo fare lo stesso nella mia app PHP. La maggior parte delle risposte che ho trovato erano simili, solo che differivano nei metodi di analisi. Un esempio di "pseudo-codice":
$supportedLocales = ['en, 'bg', 'pl'];
$locale = 'en'; // default fallback locale
$userLangs = preg_split('/,|;/', $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
foreach($userLangs as $lang)
{
if(in_array($lang, $supportedLocales))
{
$locale = $lang;
break;
}
}
Ma, dopo un po 'di sperimentazione con l'intestazione Accept-Language nel mio browser per vedere se tutto funziona correttamente, ho notato che potrei effettivamente rendere l'header molto lungo, facendo sì che il server faccia un sacco di looping perché il codice sopra i loop attraverso l'intero array $ supportedLocales per ogni chiave nell'array $ userLangs. Potrei davvero inviare facilmente un'intestazione Accept-Language falsificata con oltre 25000 lingue false che non erano supportate dall'app, generando quindi oltre 100000 iterazioni in totale. Non includendo le iterazioni utilizzate per confrontare i valori della stringa.
Anche qui sui siti web di Stack, potrei inviare più di qualche migliaio di lingue prima di ottenere un errore di '400 Bad Request'. Se questo può essere considerato un attacco, come si può proteggere il suo sito web da intestazioni di questo tipo? So che potrei limitare la quantità di lingue, ma quale importo può essere considerato normale?