2010-10-06 7 views
9

Je suis nouveau à la sécurité des applications Web. Je suis en train de développer une application dans Cakephp et un de mes amis m'a parlé des attaques de contrefaçon de requêtes inter-sites (CSRF) et de scripts inter-sites (XSS), etc., mais je ne sais pas combien il y en a d'autres.Cakephp Security

J'ai besoin d'aide pour comprendre comment faire en sorte que Cakephp défende mon application Web contre celles-ci. nous sommes à petit budget et nous ne pouvons pas engager un consulat de sécurité dès maintenant. Nous sommes encore en train de développer l'application et nous prévoyons la publier d'ici la fin du mois. donc vous voulez prendre soin des choses initiales qui peuvent m'aider à ne pas être piraté;)

Répondre

17

Il n'y a pas (et ne peut pas être) un outil que vous pouvez déployer et ne plus jamais avoir à penser à la sécurité. Déployer des hacks «anti-XSS» comme le Sanitize::clean de CakePHP aura un impact sur les utilisateurs en bloquant les entrées valides, sans pour autant rendre l'application sécurisée. Les hacks de filtrage d'entrée sont au mieux une mesure d'obfuscation, pas une solution pour les failles de sécurité. Pour avoir une application Web sécurisée, vous devez écrire une application Web sécurisée, à partir de zéro. Cela signifie, en premier lieu, une attention aux détails lorsque vous mettez des chaînes d'un contexte dans un autre. En particulier:

  • chaque fois que vous écrivez une chaîne au contenu texte HTML ou valeur d'attribut, HTML-y échapper (htmlspecialchars()) afin d'éviter l'injection HTML conduisant à XSS. Ce n'est pas juste une question d'entrée de l'utilisateur qui pourrait contenir des attaques, c'est la bonne façon de mettre du texte brut en HTML.

    Si vous utilisez des méthodes d'aide HTML, ils doivent prendre soin de HTML-escaping de ces éléments par défaut (sauf si vous désactivez escape); Il est très regrettable que le tutoriel CakePHP inclue la mauvaise pratique consistant à renvoyer des chaînes non échappées en HTML pour du texte en dehors des helpers HTML.

  • chaque fois que vous créez des requêtes SQL avec des valeurs de chaîne, SQL-échappe-le (avec une fonction appropriée pour votre base de données comme mysql_real_escape_string).

    Si vous utilisez ORM de CakePHP et que vous n'écrivez pas votre propre SQL, vous n'avez pas à vous en préoccuper. Évitez d'utiliser l'entrée utilisateur (par exemple, les noms de téléchargement de fichiers) pour nommer les fichiers sur le système de fichiers (générez des ID uniques propres à la place) ou comme partie d'une commande system().

  • inclure le composant Security pour ajouter un schéma de jeton de soumission de formulaire qui empêchera XSRF sur les formulaires générés par CakePHP.

+0

grâce à un cours accéléré sur la sécurité. une question tout en utilisant HTML Helpers doesnt - htmlspecialchars() et mysql_real_escape_string() se produisent automatiquement? –

+0

Lorsque vous utilisez des helpers HTML, 'htmlspecialchars()' est fait par défaut, yes, sauf si vous définissez ''escape' => false'. 'mysql_real_escape_string()' ne l'est pas, car cela n'a pas de sens d'échapper SQL. Cela doit se produire lorsque vous parlez à la base de données (et sera fait automatiquement si vous utilisez l'ORM). 'htmlspecialchars()' est nécessaire lorsque vous envoyez un contenu sans assistant, tel qu'un contenu non-formulaire en ligne. par exemple. '

Bonjour, !

'. – bobince

+3

"il est très regrettable que le tutoriel CakePHP inclue la mauvaise pratique d'écho de chaînes non-échappées en HTML pour du texte en dehors des assistants HTML" Je suis d'accord - de nombreuses personnes ne savent pas que c'est vraiment mauvais. – mark