Mysql安全性测试

一、没有进行预处理的SQL语句

<?php           // 1.连接数据库    $conn = mysql_connect(&#39;127.0.0.1:3306&#39;, &#39;root&#39;, &#39;518666&#39;);    if (!$conn)    {      die("Could not connect:" . mysql_error());    }      // 2.选择数据库    mysql_select_db(&#39;mysql_safe&#39;, $conn);        // 3.设置编码,注意这里是utf8而不是utf-8,如果写后者,MySQL不会识别的,会出现乱码的。    mysql_query("SET NAMES utf8");      $title    = "我们的爱情";    $content  = &#39;你是/谁啊,大几都"老梁"做做&>women<a>没';    $add_time = date("Y-m-d H:i:s");      // 转义字符    $content = mysql_real_escape_string($content);    $content = htmlspecialchars($content, ENT_COMPAT);    // 你是/谁啊,大几都做做&amp;&gt;women</a><a>没   // 自动过滤反斜杠  /*    // 4.插入一条数据    $insert_sql = "insert into post_tbl (title, content, user_id, add_time) values ('{$title}', '{$content}', '4742551', '{$add_time}')";   if(mysql_query($insert_sql))    {      echo 'ok';      }    else    {      echo "Error : " . mysql_error();    }     $ret = mysql_affected_rows();    print_r($ret);    */     // 5.PDO预处理插入     // PDO(PHP Data Object)则是提供了一个 Abstraction Layer 来操作数据库      // 查询      $user_id  = 174742;      $password = "''or '1=1'" ;      $sql = "select * from post_tbl where user_id = {$user_id} and password = {$password}";        print_r($sql);      $query  = mysql_query($sql);      // $result = mysql_fetch_array($query);        $rows = array();      while($row=mysql_fetch_array($query))      {           $rows[] = $row;      }             print_r( $rows);            // 关闭数据库连接    mysql_close($conn);    /*    $str = "Bill &amp; 'Steve'";  echo htmlspecialchars($str, ENT_COMPAT); // 只转换双引号  echo "<br>";  echo htmlspecialchars($str, ENT_QUOTES); // 转换双引号和单引号  echo "<br>";  echo htmlspecialchars($str, ENT_NOQUOTES); // 不转换任何引号  */    /*  以上代码的 HTML 输出如下(查看源代码):  nbsp;html&gt;      Bill &amp; 'Steve'<br>  Bill &amp; 'Steve'<br>  Bill &amp; 'Steve'      以上代码的浏览器输出:  Bill &amp; 'Steve'  Bill &amp; 'Steve'  Bill &amp; 'Steve'  */      function mforum_html_tag_to_html_entity($content)  {    $content = (string)trim($content);    if(empty($content)) return '';    // $content = str_replace(' ', ' ', $content);    $content = htmlspecialchars($content, ENT_COMPAT, GB2312, false);    $content = str_replace("&gt;", "&gt;", $content);    $content = str_replace("<p style="box-sizing: border-box; font-family: " helvetica neue arial sc sans gb micro hei yahei sans-serif font-weight: line-height: color: rgb margin: font-size: white-space: normal background-color:>二、PDO处理的SQL语句</p> <pre class="brush:php;toolbar:false"><?php       // PDO的使用  // http://blog.csdn.net/qq635785620/article/details/11284591  $dbh = new PDO(&#39;mysql:host=127.0.0.1:3306;dbname=mysql_safe&#39;, &#39;root&#39;, &#39;518666&#39;);      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);      $dbh-&gt;exec('set names utf8');       $title    = "我们的爱情";  $content  = '你是/谁啊,大几都"老梁"做做&amp;&gt;women<a>没' . " 测试打印号'我是单引号'哈哈";  $user_id  = 174742;  $add_time = date("Y-m-d H:i:s");    // $insert_sql = "insert into post_tbl (title, content, user_id, add_time) values (:x_title, :x_content, :x_user_id, :x_add_time)";    // $stmt = $dbh-&gt;prepare($insert_sql);   // $stmt-&gt;execute(array('x_title'=&gt;$title,':x_content'=&gt; $content, ':x_user_id' =&gt; $user_id, ':x_add_time' =&gt; $add_time));        // 查询  $user_id  = "17474#";  // $password = "''or '1=1'";   $password = 123456;  $sql = 'select * from post_tbl where user_id = :x_user_id and password = :x_password';  $stmt = $dbh-&gt;prepare($sql);      $stmt-&gt;execute(array(':x_user_id'=&gt;$user_id, ':x_password' =&gt; $password));        $rows = array();  while($row = $stmt-&gt;fetch(PDO::FETCH_ASSOC))  {        $rows[] = $row;            }     print_r($rows);        // echo $dbh-&gt;lastinsertid();</a>

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享