Questa è la mia situazione: ho una pagina dei risultati di ricerca in PHP dove la maggior parte della logica risiede in un file javascript per evitare di aggiornare la pagina ogni volta che viene eseguita un'azione. La prima cosa che faccio usando PHP è filtrare e salvare valori di stringa di query validi in variabili PHP e faccio uso della funzione htmlspecialchars per prevenire l'iniezione. Ora, mi piacerebbe chiamare la mia funzione javascript usando quelle variabili, così ho creato un tag script in fondo alla pagina per passare le variabili PHP ad esso (vedi il mio esempio).
Quando ho inserito tutto il mio codice javascript all'interno del suo ambito (mentre leggevo questa era una buona pratica di sicurezza), mi sono reso conto che non potevo più chiamare la mia funzione da fuori. Mi rendo anche conto che il metodo javascript può ancora essere chiamato con qualsiasi cosa l'hacker voglia, quindi vuol dire che non posso davvero usare htmlspecialchars nella mia situazione?
Ecco una versione ridotta del mio codice:
<?php
try {
if (isset($_GET["id"])) {
if (!is_numeric($_GET["id"]))
throw new Exception("URL is not in a correct format");
$id= $_GET["id"];
}
elseif (isset($_GET["keyword"])) {
$keyword = htmlspecialchars($_GET["keyword"]);
}
}
catch (Exception $e) {
// handle error
}
?>
<html>
<head></head>
<body>
<div class="searchResults"><!-- placeholder --></div>
<?php
if (isset($id)) {
echo '<script type="text/javascript">ShowSearchResults("id",'.$id.');</script>';
}
elseif (isset($keyword)) {
echo '<script type="text/javascript">ShowSearchResults("keyword","'.$keyword.'");</script>';
}
?>
</body>
</html>
Questo è fondamentalmente il js:
function ShowSearchResults(key,value)
{
$.getJSON("includes/search_results.php?"+key+"="+value,
function(data) {
// populate search results
$(".searchResults").html( "search results" );
})
.error(function() {
$(".searchResults").html( "no results" );
});
}
Le mie domande sono (tenendo a mente la sicurezza e le migliori pratiche):
È una cattiva pratica passare i valori della stringa di query alla mia funzione javascript dall'interno del corpo? Inizialmente l'ho fatto perché avevo l'impressione che non fosse una buona idea estrarre i valori della stringa di query usando javascript. Forse ho torto lì.
Dovrei estrarre i valori della stringa di query dalla funzione $ (documento) .ready e poi chiamare le funzioni javascript appropriate da lì? Qual è il modo appropriato per farlo (equivalente a htmlspecialchars)?
Ricorda che all'interno del mio codice javascript, uso $ .getJSON per chiamare un'altra funzione lato server (in PHP) che può rifiutare qualcosa di non sicuro.
Qualsiasi intuizione sarebbe molto apprezzata.