1

我正在使用 PHP 程序 RIPS ( http://rips-scanner.sourceforge.net/ ) 来扫描我的 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

addlashes 的不安全使用是什么意思?如何保护下面的代码?

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 的输出,注意应该从下往上读取的行号。

4

3 回答 3

1

addslashes是注射防护差。相反,您应该使用mysql_real_escape_string. 实际上,您也不应该使用它。您应该对 PDO 或 mysqli 使用正确的参数化查询。

于 2013-10-09T12:59:37.067 回答
0

Stack Overflow 的一个非常有趣的特性,还在等待它的勤奋研究人员:

从来没有人读过问题正文。

由于“西部最快的枪”问题,参与者之间形成了一个共同的习惯,形成了这样的算法:

  1. 阅读问题标题。
  2. 在其中找到关键字
  3. 在您当地的知识库中搜索与此关键字相关的最普遍的陈词滥调或迷信。
  4. 把它们作为答案。
  5. 收集声望点。

具有讽刺意味的是,它起作用了。大多数时候。
提出问题的人很少进行最少的研究,他们的问题都是相似的。
因此,这种基于关键字的方法非常有效。

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

不带引号的 addlashes() 的不安全使用

就如此容易。现在让我们转向实际问题:

如何保护下面的代码?

使用占位符。

  • 最常见的解决方案是PDO
  • 最方便和最安全的一个 - safeMysql,它实际上允许您使用占位符来 动态添加到查询中的所有内容。
于 2013-10-09T13:36:00.850 回答
-2

尝试使用mysql_real_escape_string代替addlashes

希望这会有所帮助。

干杯

于 2013-10-09T13:03:45.293 回答