我正在制作一个引号和短语网站。我想发布这些报价并阻止<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)))
,它会发布<Ω∑©√ß µ„…–å∫∂ƒ™¶§ ~{}œæ€®†¥ øπ[]
有人警告我,这很容易受到SQL注入的攻击
我该如何防止这种情况发生?
作为附加信息,这是通过AJAX调用的。
这些应该可以随心所欲。
输入时:
$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"]));