22/66
\begin{frame}[fragile]
  \frametitle{SQL Injection}

  \vspace{-1ex}
  \begin{exampleblock}{Website with Login Screen}
    \vspace{-.5ex}
    \begin{tcenter}
    \begin{tikzpicture}
      \node (n) [anchor=east] at (0,0) {Name:};
      \node [ro=n,rectangle,draw,fill=yellow!10,minimum width=30mm,minimum height=4mm,align=left] {\sql{\alt<-2>{Maria}{\alert{Joe' -\,-}}}};
      \node (n) [anchor=east] at (0,-5mm) {Password:};
      \node [ro=n,rectangle,draw,fill=yellow!10,minimum width=30mm,minimum height=4mm,align=left] {\sql{\alt<-2>{12345}{who cares}}};
    \end{tikzpicture}
    \end{tcenter}
    \vspace{-1ex}
  \end{exampleblock}
  
  \begin{code}{\textwidth}{Server Side SQL}
    \begin{lstlisting}[language=Java]
String userName = // name that the user has entered
String userPassword = // password that the user has entered

ResultSet rs = stat.executeQuery(
  "select balance from accounts " +
  "where  name = '" + userName + "'" + 
  "   and password = '" + userPassword + "'"
);
    \end{lstlisting}
  \end{code}
  \pause\vspace{-2ex}
  
  \begin{code}{\textwidth}{The Resulting SQL Query}
    \sql{select balance from accounts}\\
    \alt<-3>{\sql{where name = \textquotesingle{}Maria\textquotesingle{} and password = \textquotesingle{}12345\textquotesingle{}}}
    {\sql{where name = \textquotesingle{}Joe\textquotesingle{} \textcolor{gray}{-\,- \textquotesingle{} and password = \textquotesingle{}who cares\textquotesingle{}}}}
  \end{code}
  \pause\pause
  \begin{alertblock}{}
    \alert{SQL injection} is a very common mistake! Very dangerous!
  \end{alertblock}
\end{frame}