Changeset 321

Show
Ignore:
Timestamp:
08/14/08 13:34:38 (3 months ago)
Author:
haypo
Message:

J'ai retrouve la dernier version :-p

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/Makefile

    r320 r321  
    88$(PDF): $(DVI) 
    99        dvipdf $(DVI) 
    10 $(DVI): $(TEX) php.tex config.tex 
     10$(DVI): $(TEX) php.tex sql.tex config.tex vrac.tex 
    1111        # Call LaTeX twice to regenerate the menu 
    12         latex $(TEX) 
    13         latex $(TEX) 
     12        (latex $(TEX) && latex $(TEX)) || ($(MAKE) clean; exit 1) 
    1413clean: 
    1514        rm -f $(DVI) $(PDF) *.log *.out *.aux *.toc *.nav *.snm 
  • presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/config.tex

    r320 r321  
    99\usepackage[latin1]{inputenc} 
    1010\usepackage{times} 
     11\usepackage{verbatim} 
    1112\usepackage[T1]{fontenc} 
    1213 
     
    2627{9 octobre 2005} 
    2728 
     29% Redéfini la macro \emph 
     30\renewcommand{\emph}[1]{\textbf{\textcolor{red}{#1}}}  
     31 
    2832\beamerdefaultoverlayspecification{<+->} 
    2933 
  • presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/php.tex

    r320 r321  
    99    \begin{column}{1.0\textwidth}<1-> 
    1010      \begin{itemize} 
    11       \item<1-> PHP est un langage interprété écrit par Rasmus Lerdorf en 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). 
    1313      \item<3-> Il est apprécié pour sa facilité d'utilisation, la grande quantité des bibliothèques incluses, 
    1414      son aspect "logiciel libre", et enfin sa grande communauté d'utilisateurs (documentation). 
     
    2727      \begin{itemize} 
    2828      \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éee par manque d'expérience, ou simplement par 
     29      \item<2-> La sécurité est souvent négligée par manque d'expérience, ou simplement par 
    3030      manque d'intérêt. 
    3131      \item<3-> Les failles de sécurité sont plus ou moins graves, mais trop souvent 
    3232      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 » :-) 
    3435      \end{itemize} 
    3536    \end{column} 
     
    4748      \item<1-> Formulaire vérifiant de manière incomplète les entrées des utilisateurs.  
    4849      \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). 
    5051      \item<4-> etc. (la liste est longue) 
    5152      \end{itemize} 
     
    6465      \item<1-> Supposer que ce qui vient de l'extérieur provient d'une 
    6566      personne qui cherche à nous nuire. 
    66       \item<2-> Ne pas expliciter les cas à proscire, mais plutôt les cas 
     67      \item<2-> Ne pas expliciter les cas à proscrire, mais plutôt les cas 
    6768      à autoriser. 
    6869      \item<3-> Concevoir l'architecture du système pour isoler les parties 
  • presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/presentation.tex

    r320 r321  
    2525  \input{php.tex} 
    2626  \input{sql.tex} 
     27  \input{vrac.tex} 
    2728\end{document} 
  • presentations/2005-Lolut-Atelier-Securite-PHP-SQL/presentation/sql.tex

    r320 r321  
    33\subsection{Présentation de SQL} 
    44 
    5 \begin{frame} 
     5\begin{frame}[fragile] 
    66  \frametitle{Présentation de SQL} 
    77 
     
    1010      \begin{itemize} 
    1111      \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} 
     18SELECT prenom FROM utilisateurs 
     19WHERE nom='STINNER'; 
     20\end{verbatim} 
    1521      \end{itemize} 
    1622    \end{column} 
     
    2632    \begin{column}{1.0\textwidth}<1-> 
    2733      \begin{itemize} 
    28       \item<1-> Beaucoup de sites webs privilégient l'utilisation d'un SGBD 
     34      \item<1-> Beaucoup de sites web privilégient l'utilisation d'un SGBD 
    2935      pour le stockage des données (plutôt que l'utilisation de fichiers). 
    3036      \item<2-> Malheureusement, l'écriture des "requêtes" SQL est souvent 
     
    3743  \end{columns} 
    3844\end{frame} 
    39  
    40 \subsection{Exemples d'injection} 
    4145 
    4246\begin{frame} 
     
    5256      vérification du mot de passe. 
    5357      \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}'; \\ 
    5559      \end{itemize} 
    5660    \end{column} 
     
    5862\end{frame} 
    5963 
    60 \subsection{Requêtes à risque
     64\subsection{Trouver et exploiter les failles
    6165 
    62 \begin{frame} 
     66\begin{frame}[fragile] 
    6367  \frametitle{Requêtes à risque} 
    6468 
     
    6670    \begin{column}{1.0\textwidth}<1-> 
    6771      \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}');} 
    7075      \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};} 
    7278      \end{itemize} 
    7379    \end{column} 
     
    7581\end{frame} 
    7682 
    77 \subsection{Trouver les failles} 
    78  
    7983\begin{frame} 
    80   \frametitle{Trouver les failles} 
     84  \frametitle{Faire parler les failles} 
    8185 
    8286  \begin{columns} 
     
    9195\end{frame} 
    9296 
    93 \subsection{Exploiter les failles} 
    94  
    9597\begin{frame} 
    9698  \frametitle{Exploiter les failles} 
     
    99101    \begin{column}{1.0\textwidth}<1-> 
    100102      \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')};} >> 
    105110      \end{itemize} 
    106111    \end{column} 
     
    108113\end{frame} 
    109114 
    110 \subsection{Apostrophe et magic-quote
     115\subsection{Se protéger de l'injection SQL
    111116 
    112117\begin{frame} 
    113   \frametitle{Apostrophe et magic-quote} 
     118  \frametitle{Apostrophe et magic quote} 
    114119   
    115120  \begin{columns} 
    116121    \begin{column}{1.0\textwidth}<1-> 
    117122      \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
    119124      ajoute un anti-slash devant les caractères suivants : << ' >>, << " >>, et les 
    120125      caractères ayant un code ASCII inférieur à 32. 
     
    131136\end{frame} 
    132137 
    133 \subsection{Renforcer ses requêtes} 
    134  
    135138\begin{frame} 
    136139  \frametitle{Renforcer ses requêtes} 
     
    143146      plus facile d'utiliser un autre type de SGBD. 
    144147      \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. 
    148153      \end{itemize} 
    149154    \end{column}