2010-08-13 3 views
1

Je lisais un article sur la sécurité des formulaires parce que j'ai une forme qu'un utilisateur peut ajouter des messages.sécurité formulaire php

J'ai lu qu'il était préférable d'utiliser strip_tags(), htmlspecialchars() et nl2br()

Quelque part d'autre dit utiliser html_entity_decode()

J'ai ce code dans ma page qui prend l'utilisateur entrée

<?php 
    $topicmessage = check_input($_POST['message']); //protect against SQLinjection 
    $topicmessage = strip_tags($topicmessage, "<p><a><span>"); 
    $topicmessage = htmlspecialchars($topicmessage); 
    $topicmessage = nl2br($topicmessage); 
?> 

mais quand je fais l'écho du message, il est sur une seule ligne et il semble que les ruptures ont été enlevés par les strip_tags et non remis par nl2br()

Pour moi, ça a du sens pourquoi ça fait ça, parce que si la pause a été supprimée, comment sait-elle où la remettre (ou le fait-elle)?

Quoi qu'il en soit, je suis à la recherche d'un moyen où je peux protéger ma forme pour être utilisé pour essayer de pirater le site comme l'utilisation de javascript sous la forme

Répondre

1

Vous avez juste besoin htmlspecialchars avant que le contenu de la forme d'impression et mysql_real_escape avant poster en SQL (vous n'en avez pas besoin avant d'imprimer), et vous devriez être bon. Il est très dangereux d'utiliser des étiquettes d'ancrage. Il vous faut une liste restreinte d'étiquettes autorisées avec des attributs limités - ce n'est pas quelque chose que vous pouvez faire en 1 ligne. Vous pourriez vouloir regarder dans les normalisateurs HTML, comme Tidy.

+0

-1 N'utilisez pas mysql_real_escape(); utiliser des requêtes paramétrées. –

+1

Je ne vois vraiment aucun inconvénient à utiliser mysql_real_escape(). Y a-t-il une raison à votre déclaration? – marekventur

8

Vous avez 2 choix:

  1. absolument aucun HTML acceptent. Utilisez strip_tags() avec NO étiquettes autorisées, ou htmlspecialchars() pour échapper les étiquettes qui peuvent être là. Autoriser le code HTML, mais vous devez nettoyer le code HTML. C'est PAS quelque chose que vous pouvez faire avec strip_tags. Utilisez une bibliothèque (Tels que HTMLPurifier) ...

0
  • Utilisez HTML Purifier pour HTML entrée et tout décaper vous ne voulez pas - mais tous les paragraphes, tous les points d'ancrage, etc.

mais importante Unrelated :

+0

-1 Pourquoi les utilisateurs n'utiliseront-ils pas les requêtes paramétrées? –