Php 由于不安全地使用不带引号的addslashes(),Userinput到达敏感接收器

Php 由于不安全地使用不带引号的addslashes(),Userinput到达敏感接收器,php,mysql,sql-injection,addslashes,Php,Mysql,Sql Injection,Addslashes,我正在使用PHP程序RIPS扫描PHP脚本中的漏洞,它会返回消息 Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes 不安全地使用addslashes意味着什么?如何保护下面的代码 47: mysql_qu

我正在使用PHP程序RIPS扫描PHP脚本中的漏洞,它会返回消息

Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes Userinput reaches sensitive sink due to insecure usage of addslashes() without quotes
不安全地使用addslashes意味着什么?如何保护下面的代码

47: mysql_query $sql = mysql_query("INSERT INTO questions_answers(PID, Name, Email, Question, Date) VALUES ('$product_ID', '$name', '$email', '$question', '$date') ") or mydie ("Error" . mysql_error() . " File: " . __FILE__ . " on line: " . __LINE__); 
4: $product_ID = addslashes($_GET['product_id']); 
38: $name = addslashes(strip_tags($name)); 
34: $name = ucwords($name); 
21: $name = '';  
5: $name = addslashes($_POST['name']); 
40: $email = addslashes(strip_tags($email)); 
14: $email = '';  
6: $email = addslashes($_POST['email']); 
39: $question = addslashes(strip_tags($question)); 
35: $question = ucfirst($question); 
7: $question = addslashes($_POST['question']); 
36: $date = time(); 
注意:这是RIPS的输出,请注意行号,它应该从下到上读取。

addslashes对注入的保护很差。相反,您应该使用mysql\u real\u escape\u字符串。实际上,你也不应该用这个。您应该在PDO或mysqli中使用正确的参数化查询。

尝试使用mysql\u real\u escape\u string而不是addslashes

希望这会有所帮助


干杯

这是堆栈溢出的一个非常有趣的功能,它仍在等待它的勤奋研究人员:

从来没有人读过这个问题。 由于西方最快的枪问题,参与者之间形成了一个共同的习惯,形成了如下算法:

阅读问题标题。 找到其中的关键字。 在您当地的知识库中搜索与此关键字相关的最普遍的陈词滥调或迷信。 把它们作为答案。 收集信誉点。 具有讽刺意味的是,它是有效的。大多数时候。 问问题的人很少费心于最少的研究,他们的问题都是一样的。 因此,这种基于关键字的方法非常有效

然而,有时会出现一个问题,不仅需要阅读标题,还需要阅读问题正文。 有时,问题正文甚至包含一个答案,对于那些费心阅读错误消息的人来说:

不带引号的addslashes使用不安全

就这么简单。让我们转向实际问题:

如何保护下面的代码

47: mysql_query $sql = mysql_query("INSERT INTO questions_answers(PID, Name, Email, Question, Date) VALUES ('$product_ID', '$name', '$email', '$question', '$date') ") or mydie ("Error" . mysql_error() . " File: " . __FILE__ . " on line: " . __LINE__); 
4: $product_ID = addslashes($_GET['product_id']); 
38: $name = addslashes(strip_tags($name)); 
34: $name = ucwords($name); 
21: $name = '';  
5: $name = addslashes($_POST['name']); 
40: $email = addslashes(strip_tags($email)); 
14: $email = '';  
6: $email = addslashes($_POST['email']); 
39: $question = addslashes(strip_tags($question)); 
35: $question = ucfirst($question); 
7: $question = addslashes($_POST['question']); 
36: $date = time(); 
使用占位符。 最常见的解决方案是 最方便和安全的一个-,它实际上允许您使用占位符来动态添加到查询中的所有内容。
看起来mysql\u real\u escape\u字符串在PHP5.5.0之后就不存在了@user1398287看起来像mysql的“真实”字符串仍然存在。这是否意味着重写整个数据库连接、插入等。。我的脚本与数据库的交互方式如何?@user1398287如果您想更改为PDO或mysqli,可能需要进行相对较大的更改。使用mysql\u real\u escape\u string只需要更改所调用函数的名称,即从addslashesis改为mysql\u real\u escape\u string,我不会调用addslashes poor,因为大多数时候它们的行为完全相同