2013-03-08 2 views
-2

J'utilise un script écrit en PHP et JQuery, qui permet de gratter un site Web statique:Comment valider les entrées utilisateur

<?php 
if(isset($_GET['site'])){ 
    $f = fopen($_GET['site'], 'r'); 
    $html = ''; 
    while (!feof($f)) { 
    $html .= fread($f, 24000); 
    } 
    fclose($f); 
    echo $html; 
} 
?> 

La partie Jquery:

$(function(){ 
    var site = $(input).val(); 

    $.get('proxy.php', { site:site }, function(data){ 

     $('#myDiv').append(data); 

    }, 'html'); 

}); 

Comme vous pouvez voir le site Web qui doit être gratté doit avoir une valeur en entrée. Je veux donner à mes visiteurs la possibilité de mettre en place leur propre site web pour être gratté.

Le problème est que je n'arrive pas à comprendre comment sécuriser la partie PHP. Comme je comprends la valeur d'entrée est un gros risque de sécurité, car tout peut être envoyé avec de la valeur. J'ai déjà connu des performances lentes et plusieurs pannes de PC fonctionnant avec ce code. Je ne sais pas si les plantages sont liés mais ils ne se produisent que lorsque je travaille sur le code. Quoi qu'il en soit, je voudrais vraiment savoir comment valider la valeur (de l'entrée) envoyé à mon serveur, seules les URL réelles devraient être à haute voix. Je googlé pour les jours mais je ne peux pas le découvrir (nouveau à PHP)

ps Si vous remarquez d'autres risques de sécurité s'il vous plaît laissez-moi savoir ..

+0

Qu'est-ce que vous espérez atteindre exactement? Que voulez-vous empêcher? –

+2

Si vous autorisez les utilisateurs à rectifier des URL arbitraires, l'ajout de toute sorte de sécurité raisonnable va être un enfer. Vous devriez vous protéger contre les inondations, les délais d'attente, les réponses préjudiciables (par exemple, les trop grosses) ... Pourquoi proposez-vous cela en tant que service public? –

+0

@Pekka Bonjour, je n'ai besoin que de valider l'URL, je pense que cela résoudra le plus grand risque de sécurité. Bien sûr, je ne peux pas sécuriser 100% – Youss

Répondre

1

Je pense que votre principal problème de sécurité, est que vous utilisez fopen pour lire le contenu de l'url, si l'utilisateur veut lire un fichier dans votre système, il doit envoyer le chemin d'accès à ce fichier et si le script a assez d'autorisations, alors ils seront en mesure d'accéder au contenu de votre disque dur.

Je recommande d'utiliser d'autres méthodes comme Curl ou tout au moins, la validation de l'entrée d'utilisateur pour vous assurer que c'est une URL valide, pour cela, je voudrais vérifier certains regular expressions

Bonne chance avec votre code!

Modifier la validation

Voici un petit exemple de ce que je voulais dire par la validation.

<?php 
if(isset($_GET['site'])){ 
    if(validURL($_GET['site']) { 
    $f = fopen($_GET['site'], 'r'); 
    $html = ''; 
    while (!feof($f)) { 
     $html .= fread($f, 24000); 
    } 
    fclose($f); 
    echo $html; 
    } else { 
    echo "Invalid URL, please enter a valid web url (i.e: http://www.google.com)"; 
    } 
} 

function validURL($url){ 
    //here goes your validation code, returns true if the url is valid 
} 
?> 

Mais si vous êtes trop nouveau pour comprendre cela, je suggère d'aller pour des exemples plus simples, puisque c'est logique assez basique.

+0

Oui bien sûr de valider, mais comment je fais ça ... Avec Jquery? – Youss

+0

@Youss Non, sur PHP, j'ai ajouté un exemple pour montrer ce que je veux dire – Deleteman

+0

Désolé Im nouveau à php..doesnt la fonction validURL ($ url) doit être sur le dessus du code plutôt que ci-dessous? – Youss

0

Il est si triste que vous ne trouviez rien sur Internet à ce sujet. C'est une chose commune. S'il vous plaît se référer les liens ci-dessous. Cela peut être utile.

PHP validate input alphanumeric plus a few symbols

http://phpmaster.com/input-validation-using-filter-functions/

+0

Merci beaucoup :) – Youss

+0

@youss De rien. S'il vous plaît ne pas oublier de upvote. – GBRocks

+0

J'ai fait upvote, vous aviez +1 ... Quelqu'un downvoted vous ... Im cliquant sur le +1 mais ça ne marche pas je le message suivant; Vous avez dernièrement voté pour cette réponse Il ya 32 mins Votre vote est maintenant verrouillé dans sauf si cette réponse est éditée – Youss

Questions connexes