【问题标题】:Handling quotes from user inputted text in SQL insert query在 SQL 插入查询中处理来自用户输入文本的引号
【发布时间】:2020-06-08 14:13:31
【问题描述】:

刚刚在我的 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 中的插入查询...

//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')";

【问题讨论】:

    标签: php sql-server ajax odbc


    【解决方案1】:

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

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

    Microsoft has documentation 给他们的司机;如果您使用的是其他驱动程序,请参考其文档。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2014-09-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多