相关疑难解决方法(0)

如何在PHP中阻止SQL注入?

如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)

这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:

INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)

可以采取哪些措施来防止这种情况发生?

php mysql sql security sql-injection

2776
推荐指数
28
解决办法
166万
查看次数

在不使用参数化查询的情况下,在避免SQL注入风险的同时,在SQL WHERE子句中包含数据的最安全的方法是什么?

什么是一个很好的函数用于使字符串安全包含在SQL查询中?例如,需要修复撇号,并且无疑也可能出现其他问题.我想要一个坚如磐石的功能,如果任何可能的输入,邪恶的行为者可以设计它.

现在,在群众告诉我使用查询参数和/或downvote/close这个问题之前,请考虑以下几点:

  • 我被困在使用设计糟糕的API的第三方库.应该按如下方式调用API:

    dataObjectVariable.FindWhere("WHERE RecordID = '(your string here)'");
    
    Run Code Online (Sandbox Code Playgroud)

    现在,我同意你100%认为这不是一个好的API,因为它(1)向用户公开内部数据库字段名称是实现细节,(2)没有机会使用参数来避免这个问题地方,(3)实际上,你可以说SQL本身是一个实现细节,不应该暴露.但是我坚持使用这个API,因为它需要与其行业中的一个领先系统集成.我们也无法让他们改变他们的API.

  • 我在这个网站上搜索了与此问题有关的其他问题,但发现答案往往强烈建议参数化查询.试图建议编写一个函数来清理字符串的答案经常被低估,没有经过深思熟虑等等 - 我不确定我是否相信它们.

我只搜索字符串,而不是其他数据类型,如数字,日期等.再次,我100%意识到使用参数化查询的好处,我希望我可以使用它们,但我不能因为我的手与此相关.

c# sql

9
推荐指数
1
解决办法
200
查看次数

mysql_real_escape_string替代SQL Server

我想知道PHP中SQL Server转义字符串的等价物是什么?

php t-sql sql-server

7
推荐指数
1
解决办法
2万
查看次数

你如何使用PHP在SQL查询中转义引号?

我有一个问题

$sql ="SELECT CustomerID FROM tblCustomer 
WHERE EmailAddress = '".addslashes($_POST['username']) ."' AND Password = '".addslashes($_POST['password']) ."'";

//  while printing,   it will be

SELECT CustomerID FROM tblCustomer WHERE EmailAddress = 'test@ab\'c.com' AND Password = '123'
Run Code Online (Sandbox Code Playgroud)

如果我们在mysql服务器中执行它,它可以工作,但不能在sql server中

这是什么解决方案?.我使用的是sql server

php sql-server

7
推荐指数
2
解决办法
3万
查看次数

关于mysql_real_escape_string的问题

我正在使用php开发我的个人网站.一切都还可以,但我只是mysql_real_escape_stringphp.net上阅读手册,发现了两件事:

  1. 在向MySQL发送查询之前,必须始终使用此函数(少数例外)使数据安全.
  2. mysql_real_escape_string()不会转义%和_.如果与LIKE,GRANT或REVOKE结合使用,这些是MySQL中的通配符.

我有两个问题:
1 - 这些例外是什么?
2-如何逃避这些角色?

php mysql escaping wildcard

5
推荐指数
1
解决办法
524
查看次数

使用 PHP for SQL Server 和无 PDO 防止 SQL 注入

我可以尽可能地清理和验证我的输入,但这绝对不能涵盖所有内容,如果我足够用力、足够彻底地擦洗,我将完全清除我的输入。

我意识到有很多关于这个主题的帖子,但似乎他们总是回到 PDO 或 Mysql(是的 - 即使有人发布关于 SQL Server 的帖子,他们收到的一半答案都表明 mysql_real_escape_string - 疯狂的世界)。 我也不能用。即使在我打字时,屏幕右侧出现一些“类似的问题”,我也一直点击各种链接,但没有任何内容能完全回答我的问题。

我正在使用 SQL Server。我正在使用 PHP 5.2.4。我不能使用 PDO(因为...?我的老板说“不”,这就是足够的理由)。

有没有一种方法可以编写一种安全的方法来准备我自己的查询语句?

过去,我曾尝试在 PHP 中构建这样的语句。(其中 $input_* 变量是某种形式的用户输入,或者我将它们从某些东西中拉出来)

$query = "
    declare @varID  int
    declare @var1   int
    declare @var2   varchar(100) 

    set @varID = cast('$input_ID' as int)
    set @var1  = cast('$input_var1' as int)
    set @var2  = cast('$input_var2' as varchar(100)) 

    update table_name_goes_here
         set var1 = @var1,  
             var2 = @var2
         where ID = @varID;
    ";
 # $query is then executed 
Run Code Online (Sandbox Code Playgroud)

但这也可能很脆弱......显然......我做的最后一件事是删除所有必要的标点符号(有时我知道他们没有理由使用某些字符)

但必须有其他选择......对吗?并且mssql_bind只适用于存储过程,这是一个明确的选择,但我不确定我是否想通过插入/更新过程自愿扩展我的职责以将维护包括在实际数据库中。

php sql-server sql-injection

5
推荐指数
1
解决办法
3660
查看次数

如何使用 sqlsrv_* 函数转义字符串?

我如何real_escape_string在 sqlsrv 中使用?

这是我的代码:

$uname = sqlsrv_real_escape_string($conn, trim($_POST['uname']));
$pass  = sqlsrv_real_escape_string($conn, trim($_POST['pword']));
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

未定义函数sqlsrv_real_escape_string

php sql-server sqlsrv

2
推荐指数
1
解决办法
7844
查看次数

标签 统计

php ×6

sql-server ×4

mysql ×2

sql ×2

sql-injection ×2

c# ×1

escaping ×1

security ×1

sqlsrv ×1

t-sql ×1

wildcard ×1