fr:devel:security
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
fr:devel:security [2016-03-03 13:38] – créée julieng | fr:devel:security [2020-08-16 09:39] (Version actuelle) – [Fuites d'informations] corrections Digitalin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | <note warning> | ||
- | Cette page n'est pas encore complète traduite. | ||
- | </ | ||
- | ====== Guide de sécurité à destination des auteurs | + | ====== Guide de sécurité à destination des auteurs |
- | Créer | + | Créer |
:!: Ceux qui souhaitent aider à la construction de cette page sont les bienvenus. Celle-ci reste peu complète (au sens // | :!: Ceux qui souhaitent aider à la construction de cette page sont les bienvenus. Celle-ci reste peu complète (au sens // | ||
Ligne 11: | Ligne 8: | ||
=== Sommaire === | === Sommaire === | ||
- | Voici quelques exemples d'une liste bien plus longue de //common securité issues// (failles de sécurité, que vous pouvez trouver sur cette page : | + | Voici quelques exemples d'une liste bien plus longue de failles |
* Cross Site Scripting (XSS) -- insertion de codes « malicieux » par le biais de la page pour corrompre la page affichée sur le navigateur de l' | * Cross Site Scripting (XSS) -- insertion de codes « malicieux » par le biais de la page pour corrompre la page affichée sur le navigateur de l' | ||
- | * Cross Site Request Forgery (CSRF) -- tricks to let you self do unknowingly harmful | + | * Cross Site Request Forgery (CSRF) -- des astuces pour vous permettre de faire vous-même, sans le savoir, des actions |
- | * Remote Code Inclusion – le code inclus | + | * Remote Code Inclusion –- comprend un code sur le serveur qui y est exécuté |
- | * Information leaks -- diffusion d' | + | * Information leaks -- diffusion d' |
- | * SQL injection – injection SQL, c' | + | * SQL injection – on peut faire des demandes non souhaitées sur vos données |
- | + | ||
- | Vous trouvez | + | |
+ | Vous trouvez | ||
===== Cross Site Scripting (XSS) ===== | ===== Cross Site Scripting (XSS) ===== | ||
- | C'est la vulnérabilité la plus commune | + | C' |
- | //Cross Site Scripting// est la méthode permettant l'attaque | + | Le Cross Site Scripting |
- | DokuWiki's plugin mechanism gives plugin developers a great deal of flexibility. In the case of syntax plugins in particular, the framework gives plugins the ability to work with raw unprocessed output. This means the wiki page data which reaches your plugin has not been processed at all. And there will be no further processing on the output after it leaves your plugin. | + | Le mécanisme de gestion des extensions de DokuWiki |
- | ===Escaping output=== | + | === « Échapper » le contenu |
- | At an absolute minimum the plugin should ensure any raw data output has all HTML special characters converted to HTML entities using the [[phpfn> | + | |
- | Also any wiki data extracted and used internally (eg. user names) should be treated with suspicion. | + | La base minimale de sécurité de votre greffon devrait être de s' |
- | ===Input checking=== | + | En outre toutes les données wiki extraites et utilisées en interne (//par exemple les noms d' |
- | Check always all your input. Use whitelists, filters, conversions to the exact data type you mean e.g. from a number inputted as mixed php value to integer and more to ensure you have __only__ data you allowed. | + | |
- | ==See also:== | + | === Vérifier les données entrantes === |
+ | |||
+ | Vérifier **toujours** toutes les données entrantes. Pour cela utiliser les filtres, listes blanches ou la conversions exactes vers le type de données de la variable. Par exemple : préférer un variable de type entier à une variable de type texte qui contient les caractères d'un type entier (plutôt 42 que ' | ||
+ | |||
+ | == Voir également | ||
* [[wp> | * [[wp> | ||
* [[http:// | * [[http:// | ||
- | ==== Typical Vulnerability Examples | + | ==== Exemples typiques de vulnérabilités |
+ | |||
+ | Vous trouverez ci-dessous quelques problèmes très courants. Les exemples sont très simples pour rendre le problème général clair. Votre greffon est probablement plus compliqué, mais vous devez garder en mémoire la logique de ces types de vulnérabilités. | ||
- | Below are some very common problems shown. The examples are very simple to make the general problem clear. Your plugin is probably more complicated, | + | === Corps syntaxiques === |
- | === Syntax Bodies === | ||
- | Many simple syntax plugins will take some user input and format it in custom | + | De nombreux greffons syntaxiques simples prennent en charge les entrées de l' |
- | Example: Here is a abridged syntax plugin to wrap a given input in a bold tag. | + | Exemple |
<code php> | <code php> | ||
Ligne 67: | Ligne 66: | ||
function render($mode, | function render($mode, | ||
if($mode != ' | if($mode != ' | ||
- | $R->doc .= '< | + | $R->doc .= '< |
} | } | ||
} | } | ||
</ | </ | ||
- | As you can see, the raw input data captured in the lexer pattern is just passed on to the render method, where no escaping at all is done. Malicious users could introduce what ever JavaScript | + | Comme vous pouvez le voir, les données d' |
- | The fix is simple: | + | La solution est simple : échapper correctement. |
<code php> | <code php> | ||
Ligne 90: | Ligne 89: | ||
function render($mode, | function render($mode, | ||
if($mode != ' | if($mode != ' | ||
- | $R->doc .= '< | + | $R->doc .= '< |
} | } | ||
} | } | ||
</ | </ | ||
- | === Forms === | + | === Formulaires |
- | When your plugin provides a form it is very common to validate the input and redisplay the form with the received user input when a validation | + | Lorsque votre greffon fournit un formulaire, il est très courant de valider la saisie et de ré-afficher le formulaire avec la saisie reçue de l' |
- | Example: The following shows a form vulenerable to an XSS attack because it does not escape the user provided input correctly: | + | Exemple |
<code php> | <code php> | ||
<form action="" | <form action="" | ||
<input type=" | <input type=" | ||
- | <input type=" | + | <input type=" |
</ | </ | ||
</ | </ | ||
- | Providing '' | ||
- | To fix the form use the [[phpfn> | + | Fournir '' |
+ | |||
+ | Pour corriger le formulaire, utilisez la fonction | ||
<code php> | <code php> | ||
<form action="" | <form action="" | ||
<input type=" | <input type=" | ||
- | <input type=" | + | <input type=" |
</ | </ | ||
</ | </ | ||
- | === Classes | + | === Classes |
- | Often plugins will accept multiple parameters and options | + | Souvent, les greffons acceptent plusieurs paramètres et options |
- | Imagine a plugin accepting the following input to display a message | + | Imaginez un greffon acceptant l' |
< | < | ||
Ligne 129: | Ligne 129: | ||
</ | </ | ||
- | In the render method of this syntax there might be code like this: | + | Dans la méthode de rendu de cette syntaxe, il pourrait y avoir un code comme celui-ci |
<code php> | <code php> | ||
- | $renderer-> | + | $renderer-> |
| | ||
| | ||
Ligne 138: | Ligne 138: | ||
</ | </ | ||
- | As you can see the message | + | Comme vous pouvez le constater, le message |
<code php> | <code php> | ||
- | $allowed = array(' | + | $allowed = array(' |
if(!in_array($class, | if(!in_array($class, | ||
$class = ' | $class = ' | ||
Ligne 150: | Ligne 150: | ||
</ | </ | ||
- | ===input URLs === | + | === URLs comme données en entrée |
- | When a plugin accepts | + | Lorsqu' |
- | Here is an example how a very simple | + | Voici un exemple de vérification très simple |
<code php> | <code php> | ||
- | // empty URL on protocol mismatch | + | // URL vide sur la non-concordance des protocoles |
if(!preg_match('/ | if(!preg_match('/ | ||
</ | </ | ||
Ligne 163: | Ligne 163: | ||
===== Cross Site Request Forgery (CSRF) ===== | ===== Cross Site Request Forgery (CSRF) ===== | ||
- | This vulnerability often appears into plugins due to the lack of understanding of this issue, often confused with the XSS. | + | Cette vulnérabilité apparaît souvent dans les greffons en raison du manque de compréhension de cette question, souvent confondue avec le XSS. |
- | Cross Site Request Forgery | + | Cross Site Request Forgery |
- | ===Adding security token=== | ||
- | DokuWiki offers functions to help you deal against CSRF attacks: [[xref> | ||
+ | === Ajouter un jeton de sécurité === | ||
- | ==See also== | + | DokuWiki offre des fonctions pour vous aider à lutter contre les attaques de la CSRF : [[xref> |
+ | |||
+ | ==Voir aussi == | ||
* [[wp> | * [[wp> | ||
* [[https:// | * [[https:// | ||
- | ==== Typical Vulnerability Example | + | ==== Exemple typique de vulnérabilité |
- | Below is the simplest example to start. You may have a more complicated plugin of your own to secure, here is just a simple | + | Voici l' |
- | Imagine you want to know something which can be answered to Yes or No, you would have a form of this type: | + | Imaginez que vous vouliez savoir quelque chose qui puisse être répondu par Oui ou Non, vous auriez un formulaire de ce type : |
<code html> | <code html> | ||
Ligne 190: | Ligne 191: | ||
</ | </ | ||
- | Then you process this form has follow: | + | Ensuite, vous traitez ce formulaire de cette façon |
<code php> | <code php> | ||
Ligne 198: | Ligne 199: | ||
</ | </ | ||
- | So a user is connected to answer this question, | + | Un utilisateur est donc connecté pour répondre à cette question, |
- | Now the user is visiting a malicious website, one which know, or not, that the user may be connected to your DokuWiki. | + | Maintenant, l' |
<code html> | <code html> | ||
Ligne 205: | Ligne 206: | ||
</ | </ | ||
- | What the user's browser will do then? | + | Que fera alors le navigateur de l'utilisateur |
- | The browser will process this image as any other and will send a request to this URL. Your plugin will then see that $_GET[' | + | Le navigateur traitera cette image comme toute autre et enverra une demande à cette URL. Votre greffon verra alors que $_GET[' |
- | That's one of the examples of CSRF. Now, how to fix this security hole? | + | C'est l'un des exemples de CSRF. Maintenant, comment remédier à cette faille de sécurité |
- | ==== Prevent | + | ==== Prévenir |
- | Remember your form above? Let's add an input in it: | + | Vous vous souvenez de votre formulaire ci-dessus |
<code html> | <code html> | ||
Ligne 224: | Ligne 225: | ||
</ | </ | ||
- | Do you see the first input? Yes? Good. Now you have to check the security token when you recieve the form, before processing it: | + | Voyez-vous la première entrée |
<code php> | <code php> | ||
Ligne 232: | Ligne 233: | ||
</ | </ | ||
- | As the malicious website will never find the value of the " | + | Comme le site web malveillant ne trouvera jamais la valeur de l' |
- | **Note: | + | **Note: |
+ | ===== Inclusion de codes à distance ===== | ||
- | ===== Remote Code Inclusion ===== | + | Cette attaque permet à un attaquant d' |
- | This attack allows an attacker to inject (PHP) code into your application. This may occur on including files, or using unsafe operations functions like [[phpfn> | + | **Filtrez toujours toute entrée** qui sera utilisée pour charger des fichiers ou qui est passée en argument à des commandes externes. |
- | **Always filter any input** that will be used to load files or that is passed as an argument to external commands. | + | ===== Fuites d' |
- | ===== Information leaks ===== | + | Cette attaque peut conduire à exposer des fichiers qui devraient normalement être protégés par les ACL de DokuWiki comme elle pourrait exposer des fichiers sur le serveur (comme ''/ |
- | This attack may lead to the exposure of files that should usually be protected by DokuWiki' | + | **Filtrez toujours toute entrée** qui sera utilisée pour charger des fichiers ou qui est passée en argument à des commandes externes. |
- | **Always filter any input** that will be used to load files or that is passed as an argument to external commands. | + | **Utilisez toujours les fonctions de vérification des ACL de DokuWiki lorsque vous accédez aux données de la page**. |
- | **Always use DokuWiki' | + | ===== Injection SQL ===== |
- | ===== SQL injection ===== | + | Cette attaque est rarement pertinente dans DokuWiki car aucune base de données n'est utilisée. Cependant, si votre extension accède à une base de données, il échappe toujours à toutes les valeurs avant de les utiliser dans les instructions |
- | This attack is rarely relevant in DokuWiki because no database is used. However if your plugin accesses a database always escape all values before using them in SQL statements. | + | Plus d' |
- | + | ||
- | More info: | + | |
* [[wp>SQL injection]] | * [[wp>SQL injection]] | ||
- | ===== Reporting Security Issues | + | ===== Signaler des problèmes de sécurité |
+ | |||
+ | Si vous rencontrez un problème avec un greffon, veuillez en informer l' | ||
- | If you encounter an issue with a plugin please inform the author of the plugin via email, optionally putting | + | En outre, un champ " |
- | Additionally a '' | + | Une fois le problème corrigé et une nouvelle version réalisée, ce champ doit être supprimé à nouveau. |
- | Once the issue was fixed and a new release was made, this field should be removed again. | + | ===== Crédits ===== |
+ | * traduction : --- [[user> | ||
+ | * [[https:// |
fr/devel/security.1457008717.txt.gz · Dernière modification : 2016-03-03 13:38 de julieng