2010-10-30 7 views
1

Je suis nouveau sur ce forum et j'ai un dilemme avec mon site MySQL/PHP. Maintenant j'ai créé une fonction qui lui passera une requête SQL et l'exécutera. Ce dont je n'ai pas tenu compte, c'est le fait que ma requête SQL transmise à la fonction apparaît dans la "source de vue" de tous les navigateurs; ce qui est un gros problème de sécurité, car les pirates peuvent voir la requête. Voici un extrait de la fonction:Comment cacher les requêtes SQL des navigateurs web (PHP)

// connect to MySQL 

$connection = mysql_connect($host,$username,$password) or die("Couldn't connect to MySQL". mysql_error()); 

// selects the database 
$db = @mysql_select_db($db_name,$connection) or die("Couldn't select database"); 

function statement ($query) 
{ 

    global $connection, $db; 
    $sql = $query; 
    $results = mysql_query($sql, $connection) or die(mysql_error()); 
    return $results; 

} 

Voilà comment elle est appelée:

$cat_results = statement("select * from $category"); 

est-il un moyen de cacher la requête passée du navigateur en utilisant la fonction je? Si pas de recommandations sur une meilleure approche de cette fonction?

Vraiment apprécier toutes les pensées sur ce !!

Andre

+2

Il n'y a rien dans le code fourni qui enverra une requête au navigateur. Pouvez-vous fournir plus de détails/code? – lonesomeday

+0

Certes, je peux vous montrer ce qui a été sorti sur les navigateurs "view source". Pardonnez le formatage! Andre

+0

@Andre ressemble à un bug dans votre code. Les balises courtes peuvent être désactivées ou vous pourriez faire quelque chose d'étrange avec des balises html/php mixtes. Personnellement, je n'utilise que l'impression de php ou un système de template. Le html et le php mélangés me font vomir. (Pas de blague) – rook

Répondre

0

il est recommandé de ne pas passer la chaîne de requête tout le chemin vers le navigateur/client. vous devriez seulement transmettre le résultat de la requête au client.

+0

Eh bien mon intention était d'afficher ce qui vient du résultat de la requête au client, ce qui se passe. En théorie, la requête pass doit être masquée pour le client car je ne renvoie pas la requête mais le resultset. – Andre

0

Sauf si vous désactivez PHP sur votre serveur, ou quelque chose se brise, vos utilisateurs ne verront jamais votre code PHP.

0

Le code PHP ne devrait jamais apparaître dans la source html. Lorsque les choses fonctionnent correctement, elles doivent toutes être traitées par le serveur et seuls les résultats doivent être envoyés au client. Peut-être que vous avez manqué un tag <? ou ?> quelque part qui l'empêche d'être vu comme php?

+0

Eh bien, je suis en train d'exécuter une configuration de serveur local avec WAMP jamais entendu parler de lui? Je n'ai pas encore essayé sur un serveur live car je suis encore en phase de production. Je vérifie mon code pour voir si j'ai encapsulé mon code PHP dans tags. Mais vous pensez que l'exécuter sur un serveur local pourrait être le problème? – Andre

2

Tout d'abord PHP n'est pas visible par le client, il est toujours exécuté par le serveur. En second lieu, le client ne peut à aucun moment exécuter SQL sur votre serveur. C'est la base de SQL Injection. Si vous créez une requête avec JavaScript et que vous lui envoyez ensuite un script php à exécuter, vous avez une vulnérabilité très sérieuse entre vos mains.

+0

Exactement Rook, c'est ce que je pensais en traitant avec PHP. Mais apparemment, je vois "select * from $ category" dans la source d'affichage de mon navigateur. Et non je n'utilise pas JavaScript pour construire la requête. – Andre