-1

到目前为止,我练习清理所有 $_GET/$_POST 输入,并始终在操作请求中调用 php 文件名,而不是 PHP_SELF。但我知道还有更多,而且它有点分散在网络上。

我将不胜感激任何有关 php 安全性的基本提示,并希望这个问题可以作为任何寻求开发 Internet 应用程序所需的标准安全措施的人的一站式场所。

4

2 回答 2

1

如果脚本正在与数据库服务器交互,则必须对发送到该服务器的所有查询进行转义以避免sql 注入。如果不采取这种安全措施,可能会造成很多破坏,但幸运的是,转义字符串非常简单,因为 php.ini 中已经存在这些函数。对于 MySQL 数据库,它是mysql_real_escape_string(string $unescaped_string [, resource $link_identifier ])

这是一个示例,它是如何工作的:

脚本:index.php?user= '; 截断表用户;SELECT * FROM users WHERE user = '

$user = mysql_real_escape_string($_GET['user']);
mysql_query("SELECT * FROM users WHERE user = '$user'"); //The table users won't be truncated
于 2013-02-09T23:20:01.177 回答
1

比使用 mysql_real_escape_string 转义每个用户输入更好的方法是使用准备好的语句。

你可以在这里阅读:http: //php.net/manual/en/pdo.prepared-statements.php

使用准备好的语句,您既快速又安全。快,因为它们准备一次并执行多次。安全,因为它们对 SQL 注入攻击免疫。

另一种类型的攻击是跨站点请求伪造攻击。许多 PHP 框架已经为此类问题做好了准备,并以一种或另一种方式解决它。如果你使用框架,你应该检查它是否提供 csrf 防御。如果你在没有框架的情况下工作,你应该开始阅读这种攻击。

最后但同样重要的是,还有 XSS 类型的攻击(跨站点脚本)。它与 javasript 中用户输入的不当转义有关。攻击者可能会从您的用户那里窃取一些重要数据。所以你也应该防范这种攻击。看这里: http: //phpmaster.com/php-security-cross-site-scripting-attacks-xss/

这些是基本类型的攻击。如果您可以阻止它们,那么您可以更安全地保护 80% 的网络。

于 2013-02-09T23:29:22.370 回答