[mysql]PHP 带标记不工作

标签: html5 MySQL PHP
发布时间: 2017/4/8 14:48:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试着去删除 xss 脚本从我的 php 论坛我做了。为了做到这一点我试着 strip_tags 函数。然而当我尝试下。标签仍然得到了发表,xss 脚本不固定的。这是我试过的代码。有什么错误吗?

    // get data that sent from form 
$topic=$_POST['topic'];
$detail=$_POST['detail'];
$name=$_POST['name'];
$email=$_POST['email'];

$topic = strip_tags($topic);
$detail = strip_tags($detail);
$name = strip_tags($name);
$email = strip_tags($email);

$datetime=date("d/m/y h:i:s"); //create date time

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";

$stmt = $dbh->prepare($sql);
$stmt->execute();

解决方法 1:

编辑︰看来我不没有把握的问题,我的错误。

使用 htmlspecialchars() 在 HTML 表单中输入而不是 strip_tags() 期间之前的查询和准备好的语句; 见我原来的答复为底部附近的相关链接。

旁注︰ 做 $stmt = $dbh->prepare($sql); 一词与"准备",并不限定为预准备语句。您需要使用的完整和正确的语法。

即︰

<input name="var" value="<?php echo htmlspecialchars($var)?>">

也有几篇文章,你可以阅读关于这个问题︰


原来的答复︰

有发生在这里的几个问题。

首先, datetimename 是 MySQL 的保留字和你不给他们特殊待遇。

在蜱中换行这些列名称

(topic, detail, `name`, email, `datetime`)

检查错误会暗示的语法错误。

它是不清楚,因为您正在使用的连接,所以使用相应的错误连接方法的 MySQL api。

什么也不清楚是什么 $tbl_name 定义为。

如果那表名称中包含空格或连字符,或任何 MySQL 会抱怨的事情,然后包该变量在蜱虫也。

即︰

INSERT INTO `$tbl_name` (topic, detail, `name`, email, `datetime`)

如果您的日期列是 DATETIME ,然后 MySQL 存储那些作为 YYYY MM DD HH:MM:SS 那么 date("d/m/y h:i:s") 将会失败。

Ref: https://dev.mysql.com/doc/refman/5.0/en/datetime.html

您将帮助发现错误的文件的顶部添加错误报告

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注︰显示错误只应该是分期,和从来没有生产。


使用预准备的语句

帮助防止注入的咨询︰

旁注︰ strip_tags() 不做任何事情来帮助防止 SQL 注入。

此外请确保您的窗体并使用 POST 方法和您的输入为他们并不是错别字承受的名称属性。

官方微信
官方QQ群
31647020