Comment écrire en toute sécurité les données JSON de fichier à l'aide de PHP
J'ai de formulaire HTML pour l'édition d'images. Toutes les données sont stockées en JSON. Quand je change actuelle de l'image, je veux enregistrer les modifications, par le biais de PHP script dans un fichier texte. Si je retourne à l'image précédente, cette configuration sera envoyer à nouveau à partir de ce fichier à la forme.
Ma question est:
Comment écrire/lire ce genre de données en toute sécurité. Où et comment vérifier efficacement les données pour éviter certains JS/PHP code injections?
J'ai joint la notion de code ci-dessous:
JavaScript (à l'aide de jQuery):
//Writing
$.ajax({
global: false,
type: "POST",
cache: false,
dataType: "json",
data: ({
action: 'write',
config: JavaScriptJSON_Obj
}),
url: 'read-write.php'
});
//Reading
$.ajax({
global: false,
type: "POST",
cache: false,
dataType: "json",
data: ({
action: 'read'
}),
url: 'read-write.php',
success: function(data){
JavaScriptJSON_Obj = data;
}
});
En PHP par exemple (read-write.php):
switch ($_REQUEST['action']) {
case 'write':
file_put_contents('config.txt', $_REQUEST['config']);
break;
case 'read':
$s = file_get_contents('config.txt');
echo json_encode($s);
break;
}
Dépend de ce qui est fait avec le JavascriptJSON_Obj je dirais. Elle pourrait ouvrir la porte à un potentiel de fichiers à distance.
Il suffit de la sauvegarder en tant que données textuelles et puis la charger que les données textuelles. Il n'y a rien de dangereux. La seule chose que vous devriez prendre en considération - les droits d'accès. Vous devez les stocker cette information dans un répertoire qui n'est pas directement accessible via un navigateur (c'est pourquoi vous avez
Il suffit de la sauvegarder en tant que données textuelles et puis la charger que les données textuelles. Il n'y a rien de dangereux. La seule chose que vous devriez prendre en considération - les droits d'accès. Vous devez les stocker cette information dans un répertoire qui n'est pas directement accessible via un navigateur (c'est pourquoi vous avez
read-write.php
pour lecture config.txt
). Vous pouvez également envisager de stocker ces données dans la DB.OriginalL'auteur Max Barnas | 2011-05-31
Vous devez vous connecter pour publier un commentaire.
Tout d'abord: JSON n'est pas le JavaScript, et vice-versa. Et JSON est même pas un bon sous-ensemble de JavaScript.
En plus de cela, puisque vous n'avez ni d'interpréter certains l'utilisateur de PHP ni une sortie en JavaScript, il n'y a pas besoin de s'inquiéter. Mais n'oubliez pas de spécifier votre sortie correctement:
Eh bien, dans certains cas, il peut être potentiellement dangereux. E. g., les données peuvent être stockées dans un fichier nommé
$_SERVER['DOCUMENT_ROOT'] . '/data.php'
, qui peut être exécuté par l'accèshttp://example.com/data.php
. Cependant, l'utilisateur devra connaître le nom d'un fichier et le fichier devrait être exécutable par le serveur (.txt fichiers ne sont généralement pas executable).OriginalL'auteur Gumbo
Le problème avec ton code, c'est qu'elle ne fonctionne pas, les problèmes de sécurité de côté. Vous devez sérialiser les données, ou encoder en json AVANT de les stocker dans un fichier, c'est à dire. comme ceci:
Serialising fonctionne comme ceci:
Aussi longtemps que vous vous assurez que le chemin d'accès en lecture/écriture est correcte, il n'y a pas d'injection de code de problèmes avec ce code. Le seul problème potentiel est que si vous pouvez choisir ce que le fichier à utiliser (plutôt que de coder en dur "config.txt" dans le code). Ensuite, vous auriez à valider pour vous assurer que le fichier est dans un répertoire donné, etc.
Oh, alors j'ai mal compris. J'ai pensé
JavaScriptJSON_Obj
est un espace réservé pour l'arbitraire d'un objet javascript ou un tableau.Eh bien, en fait, en vertu de mon script JS,
JavaScriptJSON_Obj
est un objet, mais seulement pour des raisons de commodité.OriginalL'auteur Jakob Egger
Je serait toujours vérifier les données renvoyées pour voir si elle est dans un format que j'attends. Dire que vous enregistrez une image... le Vérifier à l'aide de MIME chèques etc. assurez-vous que c'est une image. Si vous venez d'enregistrer les données sur le serveur, ouvrez la porte pour certains problèmes de sécurité potentiels.
Si vous voulez dire que vous venez d'enregistrer des données sur des images a été considéré qu'il pourrait encore poser un problème en fonction de comment et où les données sont accessibles et utilisées. Donc, si vous avez à l'exception d'un nombre entier et rien de plus, assurez-vous que les données que vous recevez et enregistrez est un entier et rien de plus.
Non, bien sûr... Le MIME est juste une première étape de vérification. Si c'est off, il n'est ÉVIDEMMENT pas une image. Mais alors vous pouvez essayer de charger l'image à assurez-vous que c'est une image valide.
L'OP est en train d'essayer de stocker les données JSON, pas des images ou des entiers.
All data is stored in JSON
, le format des données réelles dans le JSON conteneur peut encore être important et considéré lorsqu'il s'agit de la sécurité.Est-il réellement possible de stocker une image binaire à l'intérieur d'un objet JSON?
OriginalL'auteur inquam