【问题标题】:How to make website more secured? [duplicate]如何让网站更安全? [复制]
【发布时间】:2012-04-23 06:53:53
【问题描述】:

可能重复:
Best way to stop SQL Injection in PHP

我有一个关于网站安全的问题。实际上我使用的查询是:

$name = $_POST['name'];
$sql = "INSERT INTO table (sno, name) VALUES('', '$name')";
mysql_query($sql);

这种编码是否保证了 sql 注入或其他方面的安全性。如果不是,我们可以使用哪些方法来保护我们的网站?

提前致谢。

【问题讨论】:

  • 呃呃呃……不。您的代码完全容易受到 SQL 注入的攻击。
  • 我是 PHP 新手。我不明白哪个是最好的方法:(
  • 你可以在这个网站上阅读一些答案,然后问一些特定的问题。

标签: php sql security sql-injection


【解决方案1】:

使用带有准备好的语句和绑定参数的PDO

PDO TUTORIAL

这是开始。

【讨论】:

  • 我想,你必须从最简单的事情开始。在我的实践中,在 80% 的情况下添加斜杠就是你所需要的)。但这是我自己的看法。
【解决方案2】:

为了保护自己免受 sql 注入,请使用 PDO

在您的情况下使用mysql_real_escape_string($string) - 但这还不够安全。 PDO)

【讨论】:

  • 这是什么意思 - “这不够安全?”您可能表现出任何特定的漏洞?
  • http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection#answer-1220516 - 这是一个解释为什么它不是。
  • PDO 也有同样的漏洞
  • 至少开箱即用,如果您没有在 DSN 中设置编码或没有关闭兼容模式
  • 所以,让你安全的是知识,而不是一些货物崇拜“做到这一点,确保安全”
【解决方案3】:

你也可以使用addslashes php函数:

<?php
    $name = addslashes($_POST['name']);
?>

【讨论】:

  • @itachi 事实上,它们本质上没有任何问题
  • @YourCommonSense:我没有说 addlashes 有什么问题。重点是在适当的领域使用适当的工具。
  • addslashes 是一个非常合适的工具。特别是与按原样使用的 mysql_real_escape_string 相比时
  • @YourCommonSense:不使用 addlashes 的一个完美理由是这个(以及为什么它不是 sql 安全的合适工具)...可以欺骗 addlashes() 创建有效的多字节无效字符中的字符。每当一个多字节字符以 0×5c(反斜杠)结尾时,攻击者可以在单引号之前注入该字符的开始字节,addslashes() 将完成字符而不是转义单引号.本质上,反斜杠被吸收,单引号被成功注入。这为 SQL 注入攻击打开了大门。
  • @itachi 这就是我要说的。 mysql_real_escape_string 也可以被欺骗。以及 PDO 准备好的语句
猜你喜欢
  • 2017-02-02
  • 2010-10-12
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多