2012-02-28 1 views
1

J'ai une page comme celle-ci. L'utilisateur écrit une URL dans un formulaire et l'envoie. Une fois l'URL envoyée, je connecte cette page avec CURL, recherche une chaîne. S'il trouve la chaîne, il ajoute l'URL dans notre base de données. Sinon, cela donne une erreur à l'utilisateur.PHP: Sécurité lors de l'utilisation de CURL?

Je désinfecte l'URL avec htmlspecialchars() également une regex pour autoriser A-Z, 1-9,:/-. symboles Je nettoie également le contenu récupéré à partir d'un autre site Web avec htmlspecialchars() aussi.

Ma question est, peuvent-ils entrer une URL comme; www.evilwebsite.com/shell.exe ou shell.txt

Est-ce que PHP pourrait l'exécuter, ou simplement rechercher la sortie HTML? Est-ce que c'est sûr ou non, que dois-je faire?

Merci.

Ps. allow_url_fopen est désactivé. C'est pourquoi j'utilise curl.

Répondre

5

Je ne vois pas pourquoi htmlspecialchars ou un Regex serait nécessaire ici, vous n'en avez pas besoin. En outre, il n'y a aucun moyen que PHP "analyse" automatiquement le contenu récupéré en utilisant cURL. Alors oui, c'est enregistrez (sauf si vous faites des choses comme eval avec la sortie). Toutefois, lors du traitement ultérieur du contenu récupéré, sachez que l'entrée est fournie par l'utilisateur et doit être gérée en conséquence.

+0

En fait, la seule chose que je fais avec le contenu récupéré est de faire un balayage regex de base. Par exemple, si le contenu récupéré contient un texte "Hello" n'importe où, il insérera l'URL dans la base de données. Sinon, il va erreur utilisateur comme "Bonjour le texte ne se trouve pas dans cette page." Y at-il des mesures que je devrais prendre pendant la numérisation pour le texte "Bonjour"? – Aristona

+0

@ AnılÜnal: Non, c'est parfaitement sécurisé. Mais vous devriez toujours laisser tomber cette aseptisation inutile, cela pourrait casser certaines URL et causer un déni de service. –

+0

htmlspecialchars() ne vous sauve pas de l'oeil d'eval :-) Je pense que son but était d'empêcher XSS. –

1

curl envoie une requête et à un serveur et le serveur renvoie des données. S'il y avait un fichier exécutable sur un serveur Web, vous récupéreriez le binaire du fichier. Sauf si vous écrivez le fichier sur votre disque et l'exécutez, il ne devrait y avoir aucun problème. La sécurité en ce sens ne devrait pas être un problème.

+0

Sauf si vous trouvez une vulnérabilité dans la version de cURL que le serveur utilise ou le script PHP l'analysant, à quel point vous avez un contrôle complet sur les données qui s'y rendent (si vous hébergez l'URL fournie) –

+0

Bien ce que vous faites avec le les données peuvent causer des failles de sécurité mais cURL ne devrait pas. La seule vulnérabilité à laquelle je peux penser est le débordement de buffer, mais PHP gère et protège contre cela. À quel genre de vulnérabilités pensez-vous? –

+0

@Patrick: PHP gère et protège contre cela? C'est une nouvelle pour moi. En outre, il existe de nombreux autres types de vulnérabilités, en particulier dans les logiciels tels que PHP. Mais ce n'est pas vraiment pertinent à la question, car vous ne pouvez pas faire grand-chose contre ce risque à court de sandboxing de votre serveur Web. –