您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行使用 near - 的正确语法

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near - at line 1

我的代码有这个问题,找不到问题的真正所在,有没有人遇到过类似的问题?

<?php
include("db.php"); 
if(isset($_POST['submit']))
{
$name=$_POST['namename'];
$job=$_POST['job'];
$message=$_POST['message'];
$insert=mysql_query("insert into     commenttable(name,job,message)values('$name','$job','$message')")or     die(mysql_error());
header("Location:../home.php");
}
?>

这是本地主机运行

服务器类型:MySQL 服务器版本:5.5.42 - 源分发

忘了说,如果我 post 简单的评论 "Hello" 它工作正常,但是当我尝试 post 这样的评论时

<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">

对于攻击,它不会起作用,我收到错误消息。 我正在为小型攻击项目做这个,这就是为什么我需要让它工作。

谢谢!

如果您的代码在您尝试插入文本 <INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');"> 时失败,那么显然,发生的事情是 Uueerdo 在他的评论中建议的: "XSS" 之前的单引号被解释为 MySQL 作为字符串的结束单引号,留下悬空的 XSS');',这当然是语法错误。

有两种方法可以解决这个问题:

  1. 以编程方式转义单引号。如果你自己来做,这将是相当棘手的,但是 PHP 中应该有一些库函数可以做到这一点,所以它看起来像 message = escape_for_sql( message )。 (对不起,我不是复制美元符号,我过敏。)

  2. 更好的是,使用参数化查询,在其中使用“?”构建查询代替每个值,表示查询的参数,然后为每个参数提供值,然后然后执行查询。我不知道PHP是怎么做到的,搜索"parameterized query PHP".

为了扩展@Mike 的回答,正确的准备语句 PHP 语法应该是,使用 mysql 驱动程序:

None. Don't use the mysql driver. It's been deprecated since forever.

使用mysqli:

// You need to define the following $db_* vars elsewhere
$dbh = new mysqli($db_host, $db_user, $db_password, $db_name;)

$query = "INSERT INTO commenttable (name, job, message) VALUES (?, ?, ?)";
$stmt = $dbh->prepare($query);
$stmt->bind_param($name, $job, $message);
$stmt->execute();

// When you're finished...
$stmt->close();

使用 PDO:

// Edit the connection string as appropriate for your installation
$dbh = new PDO('mysql:host=mydbhost;dbname=whatever', $db_user, $db_password);

$query = "INSERT INTO commenttable (name, job, message) VALUES (:name, :job, :message)";
$stmt = $dbh->prepare($query);
$params = array(':name' => $name, ':job' => $job, ':message' => $message);
$stmt->execute($params);

// PDO has no explicit close() call.

我将错误处理留作 reader 的练习。希望对您有所帮助。