Безопасность запросов MySQL и метка времени с PHP - PullRequest
0 голосов
/ 12 марта 2012

Я делаю цитаты и фразы на сайте.Я хочу опубликовать эти цитаты и запретить <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 Ответ

2 голосов
/ 12 марта 2012

Они должны делать то, что вы хотите.

На входе:

$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"]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...