Changeset 321
- Timestamp:
- 08/14/08 13:34:38 (3 months ago)
- Files:
-
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation.pdf (modified) (previous)
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/Makefile (modified) (1 diff)
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/config.tex (modified) (2 diffs)
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/php.tex (modified) (4 diffs)
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/presentation.tex (modified) (1 diff)
- presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/sql.tex (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/Makefile
r320 r321 8 8 $(PDF): $(DVI) 9 9 dvipdf $(DVI) 10 $(DVI): $(TEX) php.tex config.tex10 $(DVI): $(TEX) php.tex sql.tex config.tex vrac.tex 11 11 # Call LaTeX twice to regenerate the menu 12 latex $(TEX) 13 latex $(TEX) 12 (latex $(TEX) && latex $(TEX)) || ($(MAKE) clean; exit 1) 14 13 clean: 15 14 rm -f $(DVI) $(PDF) *.log *.out *.aux *.toc *.nav *.snm presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/config.tex
r320 r321 9 9 \usepackage[latin1]{inputenc} 10 10 \usepackage{times} 11 \usepackage{verbatim} 11 12 \usepackage[T1]{fontenc} 12 13 … … 26 27 {9 octobre 2005} 27 28 29 % Redéfini la macro \emph 30 \renewcommand{\emph}[1]{\textbf{\textcolor{red}{#1}}} 31 28 32 \beamerdefaultoverlayspecification{<+->} 29 33 presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/php.tex
r320 r321 9 9 \begin{column}{1.0\textwidth}<1-> 10 10 \begin{itemize} 11 \item<1-> PHP est un langage interprété écrit par Rasmus Lerdorfen 1994.12 \item<2-> Il est très utilisé aujourd'hui dans les sites Internet (25 millions de site en 2005).11 \item<1-> PHP est un langage interprété écrit par \textit{Rasmus Lerdorf} en 1994. 12 \item<2-> Il est très utilisé aujourd'hui dans les sites Internet (25~millions de site en 2005). 13 13 \item<3-> Il est apprécié pour sa facilité d'utilisation, la grande quantité des bibliothèques incluses, 14 14 son aspect "logiciel libre", et enfin sa grande communauté d'utilisateurs (documentation). … … 27 27 \begin{itemize} 28 28 \item<1-> PHP est souvent le premier langage appris par les concepteurs de site Internet. 29 \item<2-> La sécurité est souvent négligée epar manque d'expérience, ou simplement par29 \item<2-> La sécurité est souvent négligée par manque d'expérience, ou simplement par 30 30 manque d'intérêt. 31 31 \item<3-> Les failles de sécurité sont plus ou moins graves, mais trop souvent 32 32 on peut avec un peu d'expérience pénétrer dans un site sans grande difficulté. 33 \item<4-> Les failles proviennent du programmeur et non pas du langage ... 33 \item<4-> Vieil adage : « 90\% des erreurs sont situées entre le clavier 34 et l'écran » :-) 34 35 \end{itemize} 35 36 \end{column} … … 47 48 \item<1-> Formulaire vérifiant de manière incomplète les entrées des utilisateurs. 48 49 \item<2-> Outil de téléchargement permettant de télécharger n'importe quel fichier. 49 \item<3-> Injection de SQL (détaillé plus tard).50 \item<3-> Injection de SQL (détaillée plus tard). 50 51 \item<4-> etc. (la liste est longue) 51 52 \end{itemize} … … 64 65 \item<1-> Supposer que ce qui vient de l'extérieur provient d'une 65 66 personne qui cherche à nous nuire. 66 \item<2-> Ne pas expliciter les cas à prosc ire, mais plutôt les cas67 \item<2-> Ne pas expliciter les cas à proscrire, mais plutôt les cas 67 68 à autoriser. 68 69 \item<3-> Concevoir l'architecture du système pour isoler les parties presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/presentation.tex
r320 r321 25 25 \input{php.tex} 26 26 \input{sql.tex} 27 \input{vrac.tex} 27 28 \end{document} presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/sql.tex
r320 r321 3 3 \subsection{Présentation de SQL} 4 4 5 \begin{frame} 5 \begin{frame}[fragile] 6 6 \frametitle{Présentation de SQL} 7 7 … … 10 10 \begin{itemize} 11 11 \item<1-> SQL est un langage permettant d'interroger ou modifier un système de 12 gestion de base de données (SQBD). 13 \item<2-> Il est XXXXXXXXXXXXXX 14 \item<3-> YYYYYYYYYYYYYYYY 12 gestion de base de données (SGBD). 13 \item<2-> Il est proche du langage naturel : sélectionne le prénom 14 des personnes parmi tous les utilisateurs dont le nom 15 est STINNER donne par exemple ... 16 \item<3-> La requête SQL : 17 \begin{verbatim} 18 SELECT prenom FROM utilisateurs 19 WHERE nom='STINNER'; 20 \end{verbatim} 15 21 \end{itemize} 16 22 \end{column} … … 26 32 \begin{column}{1.0\textwidth}<1-> 27 33 \begin{itemize} 28 \item<1-> Beaucoup de sites web sprivilégient l'utilisation d'un SGBD34 \item<1-> Beaucoup de sites web privilégient l'utilisation d'un SGBD 29 35 pour le stockage des données (plutôt que l'utilisation de fichiers). 30 36 \item<2-> Malheureusement, l'écriture des "requêtes" SQL est souvent … … 37 43 \end{columns} 38 44 \end{frame} 39 40 \subsection{Exemples d'injection}41 45 42 46 \begin{frame} … … 52 56 vérification du mot de passe. 53 57 \item<3-> Requête résultante : \\ 54 SELECT login FROM users WHERE login='haypo' AND password=' xxx' OR 'a='a'; \\58 SELECT login FROM users WHERE login='haypo' AND password='\emph{xxx' OR 'a='a}'; \\ 55 59 \end{itemize} 56 60 \end{column} … … 58 62 \end{frame} 59 63 60 \subsection{ Requêtes à risque}64 \subsection{Trouver et exploiter les failles} 61 65 62 \begin{frame} 66 \begin{frame}[fragile] 63 67 \frametitle{Requêtes à risque} 64 68 … … 66 70 \begin{column}{1.0\textwidth}<1-> 67 71 \begin{itemize} 68 \item<1-> SELECT (...) WHERE champ='\$valeurd'; 69 \item<2-> INSERT INTO table WHERE (champ) VALUES('\$valeur'); 72 \item<1-> \texttt{SELECT (...) WHERE champ='\emph{\$valeur}';} 73 \item<2-> \texttt{INSERT INTO table (a,b) \\ 74 VALUES('\emph{\$valeura}', '\emph{\$valeurb}');} 70 75 \item<3-> Négligence des apostrophes (les pires) : \\ 71 SELECT titre, description FROM livre WHERE id=\$id; \\ 76 \texttt{SELECT titre, description \\ 77 FROM livre WHERE id=\emph{\$id};} 72 78 \end{itemize} 73 79 \end{column} … … 75 81 \end{frame} 76 82 77 \subsection{Trouver les failles}78 79 83 \begin{frame} 80 \frametitle{ Trouver les failles}84 \frametitle{Faire parler les failles} 81 85 82 86 \begin{columns} … … 91 95 \end{frame} 92 96 93 \subsection{Exploiter les failles}94 95 97 \begin{frame} 96 98 \frametitle{Exploiter les failles} … … 99 101 \begin{column}{1.0\textwidth}<1-> 100 102 \begin{itemize} 101 \item<1-> Outrepasser un test : << xxx' OR 'a'='a >> 102 \item<2-> Injecter une requêtre avec UNION : << xxx' UNION SELECT ... FROM table; >> 103 \item<3-> Fichiers : << SELECT ... INTO OUTFILE '/tmp/exploit'; >> et 104 << SELECT LOAD\_FILE('/etc/passwd'); >> 103 \item<1-> Outrepasser un test : \\ 104 << SELECT ... WHERE id='\emph{xxx' OR 'a'='a}'; >> 105 \item<2-> Injecter une requête avec UNION : \\ 106 << \texttt{SELECT ... WHERE id='\emph{xxx' UNION SELECT ... FROM table\#}';} >> 107 \item<3-> Fichiers : \\ 108 << \texttt{SELECT ... \emph{INTO OUTFILE '/tmp/exploit'};} >> \\ 109 << \texttt{SELECT \emph{LOAD\_FILE('/etc/passwd')};} >> 105 110 \end{itemize} 106 111 \end{column} … … 108 113 \end{frame} 109 114 110 \subsection{ Apostrophe et magic-quote}115 \subsection{Se protéger de l'injection SQL} 111 116 112 117 \begin{frame} 113 \frametitle{Apostrophe et magic -quote}118 \frametitle{Apostrophe et magic quote} 114 119 115 120 \begin{columns} 116 121 \begin{column}{1.0\textwidth}<1-> 117 122 \begin{itemize} 118 \item<1-> L'option "magic-quote" de PHP (voir la fonction get\_magic\_quotes();)123 \item<1-> L'option magic\_quotes de PHP (actif par défaut) 119 124 ajoute un anti-slash devant les caractères suivants : << ' >>, << " >>, et les 120 125 caractères ayant un code ASCII inférieur à 32. … … 131 136 \end{frame} 132 137 133 \subsection{Renforcer ses requêtes}134 135 138 \begin{frame} 136 139 \frametitle{Renforcer ses requêtes} … … 143 146 plus facile d'utiliser un autre type de SGBD. 144 147 \item<2-> Utiliser une fonction qui échapper les caractères spéciaux. 145 Exemple : mysql\_real\_escappe\_string() du module MySQL de PHP, ou 146 qstr() de la bibliothèque AdoDB. 147 \item<3-> TODO: Trouver une 3e point :-D 148 Exemple : \texttt{mysql\_real\_escappe\_string()} du module MySQL 149 de PHP, ou \texttt{qstr()} de la bibliothèque AdoDB. 150 \item<3-> Rappel : considérer que ce qui vient de l'extérieur est 151 susceptible de venir d'un pirate, et indiquer les cas valides 152 plutôt que lister les cas invalides. 148 153 \end{itemize} 149 154 \end{column}
