2009-02-13 7 views
1

J'utilise jQuery pour appeler les fichiers PHP via la méthodeAjax et les noms de fichiers - Meilleures pratiques

function fetchDepartment(company_id) 
{ 
    $.get("ajax/fetchDepartment.php?sec=departments&company_id="+company_id, function(data){ 
     $("#department_id").html(data); 
    }); 
} 

.get $ Ce que je pense est que je peux fixer le nom de fichier encore plus loin?

Actuellement, j'ai un contrôle global d'accès dans le fichier .php qui vérifie si l'utilisateur est connecté, s'il peut accéder à ces données, etc.

Mais je me demande s'il y a d'autres mesures que je peux prendre si un utilisateur n'a pas pu voir ce nom de fichier ou les autres étapes que vous recommandez de suivre.

Répondre

2

demandes Encoded
Vous pouvez faire les détails de la demande effectivement invisible à l'mécréant occasionnel en codant la quasi-totalité de l'URL et le décodage du côté serveur détails de la demande.

Les détails de la demande incluent l'action que vous souhaitez effectuer ainsi que les paramètres relatifs à cette action.

Toutes les demandes seraient envoyées à une seule URL, où un processus côté serveur décoderait les détails de la demande et effectuerait l'action appropriée selon les besoins.

Exemple
URL d'origine:
/ajax/delete.php?parameter1=foo & paramètre2 = bar

Détails de la demande:
action = supprimer & paramètre1 = foo & paramètre2 = bar

détails de la demande codés (codé à l'aide de base64):
YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

URL encodée:
/ajax/request = YWN0aW9uPWRlbGV0ZSZwYXJhbWV0ZXIxPWZvbyZwYXJhbWV0ZXIyPWJhcg ==

Je ne crois pas qu'il y ait une fonctionnalité native pour encoder base64 en JavaScript, mais il est loin d'être impossible de trouver une méthode appropriée? ou pour écrire le vôtre. Avec le JavaScript client obfusqué/minifié, il serait assez difficile pour quelqu'un de déterminer comment faire une demande «à la main».

Cacher la mise en œuvre détails
Il y a un certain nombre de pratiques que vous pouvez suivre pour rendre moins votre application susceptible d'être attaquée par une mauvaise utilisation des URL.

Commençons par une URL de: ajax/fetchDepartment.php?s = départements & company_id = 99

Il n'y a pas besoin de révéler ce que la technologie côté serveur que vous utilisez (PHP), ni par la chaîne de requête (sec, company_id), quelles sont les valeurs de chaîne de requête fait signifie.

Occultant la technologie côté serveur
En supposant que vous avez index.php défini par défaut, les URL suivantes sont équivalentes:

  • ajax/fetchDepartment.php?sec=departments&company_id=99
  • ajax/fetchDepartment/index.php?sec=departments&company_id=99
  • ajax/fetchDepartment/?sec=departments&company_id=99

La troisième URL ne révèle pas la technologie côté serveur que vous utilisez. Cela limite la gamme des attaques possibles. Cela vous permet également de passer à une autre technologie côté serveur sans modifier vos URL.

Hiding le sens de la demande paramètres

  • ajax/fetchDepartment/?sec=departments&company_id=99
  • ajax/99/departments/

Cette dernière URL transmet encore suffisamment d'informations pour effectuer la demande sans révéler ce que les moyens d'information.

Alors que quelqu'un pourrait encore changer les valeurs, il ne saura pas ce qu'il change. Cela rendra plus difficile pour un attaquant d'évaluer et de comprendre le résultat de toute modification d'URL qu'il effectue.

+0

Très belle réponse, merci. –

0

La manière dont vous pouvez masquer l'URL d'un élément d'information donné par l'utilisateur est pratiquement impossible si vous ne le chargez pas via http. Peut-être que vous pouvez charger un ensemble de données sur la page d'appel, ou une autre page avec une URL plus générique.

Questions connexes