MySQL使用PHP查询安全性和时间戳

时间:2012-03-11 20:50:36

标签: php mysql sql-injection

我正在制作一个引号和短语网站。我想发布此引号并阻止<script>或类似<html tags>,我目前正在使用以下查询发布并将此数据推送到数据库

mysql_query("INSERT INTO `phrases` 
    (`id`, `text`, `date`, `views`, `ip`, `reported`, `strange`, `lang`) 
    VALUES (NULL, '$quote', '$date', '0', '$ip', '0', '0', 'en')
");

使用以下PHP代码

<?php
$date = date('Y-m-d H:i:s', time());
$quote = $_POST["quote"];
$ip = $_SERVER['REMOTE_ADDR'];
//The query above
?>

但是我遇到了以下问题:

  • 已完成 :时间戳未正确显示。

  • 我收到了一些非转义字符。

    例如,我正试图发布这个:

         <Ω∑©√ß µ„…–å∫∂ƒ™¶§ ~{}œæ€®†¥  øπ[]
    
    • 如果我发布此as is,则会发布

      <Ω∑©√ß µ„…–å∫∂ƒ™¶§ ~{}œæ€®†¥  øπ[]
      
    • 如果我使用mysql_real_escape_string($quote),则会发布

      <Ω∑©√ß µ„…–å∫∂ƒ™¶§ ~{}œæ€®†¥  øπ[]
      
    • 如果我使用htmlspecialchars(nl2br(stripslashes($quote))),则会发布

      &lt;Ω∑©√ß µ„…–å∫∂ƒ™¶§ ~{}œæ€®†¥  øπ[]
      
  • 我被警告说这很容易受到SQL注入

我该如何防止这种情况?

作为附加信息,这是通过AJAX调用的。

1 个答案:

答案 0 :(得分:2)

这些应该做你想要的。

输入时:

$date = date('Y-m-d H:i:s', time());
$ip = $_SERVER['REMOTE_ADDR'];
$quote = mysql_real_escape_string($_POST["quote"]);

输出:

echo nl2br(htmlspecialchars($row["quote"]));