提问者:小点点

在SQL insert查询中处理用户输入文本中的引号


我在一个Ajax表单上遇到了一个问题,因为用户在描述字段中输入了报价,所以不允许提交表单。

我通过ODBC连接到数据库,并使用Ajax表单将值插入数据库。

我尝试使用以下方法

$problemDescription = addslashes($_POST['problemdescript']); 

但是错误还是一样的,那就是。。。

"PHP Warning:  odbc_exec(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 's'., SQL state 37000 in SQLExecDirect in D:\inetpub\wwwroot\SMT_Request_DevWIP\board\newJob.php on line 89"

下面是我在PHP中的insert查询。。。

//Statement to insert into table
$SQL = "INSERT INTO dbo.[table1] (requestorName, requestedDate, problemDescription, Attachment, Status, Category, Reason, Action_Required,
    Area, Model, Board, Side, Revision, Line) VALUES ('$requestorName', '$requestorDate', '$problemDescription', '$addattachment', '$Status',
    '$Category', '$Reason', '$actionRequired', '$Area', '$Model', '$Board', '$Side', '$Revision', '$Line')";

共1个答案

匿名用户

这是经典的SQL注入。 您的应用程序将因此受到损害或破坏,因为您信任用户输入,而您永远不能信任用户输入。

您需要使用准备好的语句/参数化查询。 这将正确处理您的用户输入,使其免受SQL注入攻击。 根据您使用的驱动程序,有一些稍微不同的方法来实现它。 简短的版本是创建一个带有输入占位符的查询,然后通过函数(而不是字符串替换)将值输入到这些占位符中。

Microsoft有驱动程序的文档; 如果您正在使用另一个驱动程序,请参考它的文档。