2010-05-04 15 views
2

Je veux que mes utilisateurs puissent écrire un article dans Markdown, l'avoir stocké dans la base de données MySQL (avec la possibilité de le modifier dans le futur), et affiché pour les autres utilisateurs.Séquence d'actions correcte lors de l'utilisation de Markdown & MySQL?

En pratique, cela est ma compréhension de la façon dont cela fonctionne:

ENTRÉE

    entrée
  1. utilisateur via le formulaire HTML en utilisant la syntaxe Markdown
  2. $queryInput = mysql_real_escape_string($userInput);
  3. insert chaîne assainie dans la base de données

SORTIE

  1. champ de requête de base de données
  2. $output = Markdown($queryResult);
  3. affichage $output

est-ce pas? Est-ce que PHP Markdown exclut la nécessité de htmlspecialchars ou Pure HTML?

Merci!

Répondre

2

J'ai évalué l'utilisation de markdown dans PHP il y a quelques semaines (et j'ai décidé de ne pas l'utiliser, d'ailleurs). Mes pensées:

  • Il pourrait ne pas être une bonne idée d'exécuter l'analyseur démarquage à chaque fois que la sortie est rendu - l'analyse du commentaire est assez cher et le commentaire de blog d'habitude (comme exemple) est beaucoup plus souvent lu que écrit. Vous devez exécuter l'analyseur de démarquage AVANT d'enregistrer l'entrée de l'utilisateur dans la base de données!

  • Maintenant, le problème vraiment difficile: Markdown ne fait aucun contrôle de sécurité par lui-même. Toutes les attaques xss sont heureusement passées. Si vous pensez maintenant "pas de problème, je vais juste strip_tags juste après l'entrée de l'utilisateur", détrompez-vous: il est tout à fait possible que markdown crée les balises contenant le XSS lors du traitement de l'entrée utilisateur. Donc, vous devez vérifier le code HTML créé par markdown pour les problèmes de sécurité - une tâche très difficile qui est très sujet aux erreurs. (Ce fut la raison de ne pas l'utiliser dans mon cas - le bénéfice n'avait pas un bon rapport aux coûts potentiels)

+0

Merci pour la réponse. 2 questions: (1) si j'analyse avant d'enregistrer dans la base de données, comment les utilisateurs peuvent-ils éditer leurs articles? (2) qu'avez-vous décidé de faire à la place de Markdown? – Drew

+0

Compromission des performances de l'analyseur - que se passe-t-il si j'ai sauvegardé 2 copies de l'entrée de l'utilisateur, une copie de l'original, une copie de l'analyse. Ensuite, je n'aurais qu'à l'analyser une fois, et si l'utilisateur voulait éditer, je pourrais leur donner l'original et écraser la copie analysée quand ils auront fini ... – Drew

+0

Le stockage de 2 copies, un analysé et un original, était aussi mon approche. Je pense que c'est une bonne idée. J'ai regardé Markdown pour un module de commentaire de blog et j'ai utilisé du texte normal avec nl2br à la place (en ajoutant une expression régulière pour surligner les liens). Pour ce cas d'utilisation, la démarque était un peu exagérée, de toute façon. –