【问题标题】:Is this secure from SQL Injection [duplicate]这对 SQL 注入安全吗?
【发布时间】:2014-03-20 15:42:04
【问题描述】:

所以这是我合作过的第一个项目,如果我使用预构建的 CMS,并且我正在努力确保提交的数据是安全的。

我的问题分为两部分:a) 我检查 $_POST 值的方式是否足够安全?这里是:

function validateInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;   
}

$id = validateInput($_POST['id']);
$name = validateInput($_POST['name']);
$address = validateInput($_POST['address']);

b) 如果不是,我怎样才能让它更安全,更不容易被 SQL 注入?

我非常感谢您对此的帮助。谢谢大家

【问题讨论】:

标签: php sql security sql-injection


【解决方案1】:

使用 mysqli 准备变量:

$id = mysqli_real_escape_string($db, $_POST['id']);
$name = mysqli_real_escape_string($db, $_POST['name']);
$address = mysqli_real_escape_string($db, $_POST['address']);

或使用数据库对象(在打开连接时定义):

$id = $db->real_escape_string($_POST['id']);
$name = $db->real_escape_string($_POST['name']);
$address = $db->real_escape_string($_POST['address']);

http://dk1.php.net/mysqli_real_escape_string

【讨论】:

  • 再一次得到毫无头绪的人的不该投赞成票
【解决方案2】:

你正在做的是一个很好的开始,不要让任何人告诉你不要转义特殊字符。

官方的回答是使用现代mysql方法,要么:mysqli要么PDO

请用谷歌搜索那些 PHP: mysqli 和 php: PDO

关于这些有很好的文档。

任何 mysql_escape_... 都已弃用。

另一个注意事项:stripslashes 不添加任何安全值。

【讨论】:

  • 感谢您的提示 :)
  • @YourCommonSense,请添加建设性帮助,而不是负面的 cmets。你显然不知道你在说什么。 trim() 方法删除了 sql 注入的第一部分,htmlspecialchars() 方法对可用于转义的字符进行编码。我从事 PHP 安全专家已有 10 年了,所以也许你应该复习一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2023-04-10
  • 2013-03-17
  • 1970-01-01
相关资源
最近更新 更多