【问题标题】:making php web application secure使 php web 应用程序安全
【发布时间】:2013-08-12 00:11:36
【问题描述】:

为了保护我的项目免受攻击(例如:SQL 注入)我使用以下查询 参数页面(*.php?query=value):

$id=strip_tags($id);
$id=mysql_real_escape_string($id);    
if(is_numeric($id) && strlen($id)<=3) //id are numbers maximum of 3 digits
  • 除了这个即时通讯使用客户端(JavaScript)和服务器端(php)验证,strip_tags() 根据需要过滤数据。
  • 密码使用bcrypt()加密
  • 所有消息都使用mcrypt_ecb()加密
  • 只有isset($_SESSION["id"])即登录后才能访问页面。
  • error_reporting(0);隐藏错误。
  • $_POST 而不是 $_REQUEST
  • mysql_real_escape_string(); 每个输入

实际上我的项目将被大学使用,我对安全性感到紧张,因为回溯很容易渗透,所以我努力让它安全。 (我知道这是一个很大的问题,但任何形式的帮助都会非常有用)但是作为一名学生,我想知道我还缺少什么来确保安全?

【问题讨论】:

  • 没有冒犯兄弟 - 但你的方法有很多问题......从哪里开始?
  • 如果您担心安全性,请忘记 MySQL 并开始使用 MySQLi 或 PDO 准备好的语句/绑定变量 - 大学应该在这方面处于领先地位,而不是落后于其他 10 年世界
  • strip_tags() 不是安全的 HTML 移除器,不应过早地转义值。
  • 如果您正确转义请求,Mysql 是安全的,但现在的重点是新版本不支持 mysql 扩展 php>=5.5 所以如果您想使用新版本,那么您必须使用其他扩展mysql ...检查这个stackoverflow.com/questions/12859942/…
  • 使用 MySQL,您必须跳过更多的障碍才能确保它的安全,而且很容易出错;准备好的语句大大减少了编码工作

标签: php security


【解决方案1】:

首先:

Avoid PHP's MySQL functions like a plague

在非常非常少或PDO instead处使用PHP的MySQLi函数。 MySQLi and especially PDO functions, are better security-wise. 但是,在这两者中,PDO 是最好的选择,因为它们通过 prepared statements 为您提供更高的抽象,这大大增加了您的 defense against SQL injection attacks:

PHP 应用程序中的大多数 SQL 语句都使用变量输入 确定 SQL 语句的结果。通过用户提供 安全地输入 SQL 语句,使用参数准备语句 标记 (?) 或表示变量输入的命名变量。什么时候 您执行准备好的语句,将输入值绑定到 参数标记。数据库引擎确保每个输入值 被视为单个参数,防止 SQL 注入攻击 反对你的申请。与通过发布的声明相比 PDO::exec(),准备好的语句提供了性能优势,因为 数据库管理系统为每个人创建一个访问计划 如果重新发布该语句,它可以重用的准备好的语句 随后。

此外,请避免使用一些旧的已弃用的 PHP 函数。

接下来,一般来说,如果您使用 PHP 或任何创建动态请求的语言,这意味着用户在某个级别上的输入,并且通常是与数据库的后续交互。 Web 编程规则 1:在任何情况下都绝不信任用户输入。完全没有。 输入的所有内容都必须经过清理和验证,以避免出现安全问题。您可以使用 PHP 在本地完成此操作,但老实说,这需要大量工作和对细节的大量关注——这当然会延长您的开发时间。

如果这不是一项学术活动或处理自我训练的活动 - try to use a framework if you can - 它可能会在以后为您省去很多麻烦,因为好的框架可以 take care of some of the overhead 处理转义、验证等。这意味着,如果您在没有框架的情况下使用突击队并编写自己的代码:您将要实现的大部分(如果不是全部)功能都将为您完成,而且很有可能 - 在框架中做得更好。

另外,它们使 PHP 开发更容易,并且偶尔,有趣。当然,并非所有框架都是平等的,所有框架也都有安全问题。但是,这是您必须牢记的事情,并始终虔诚地让自己了解情况。

如果这是一项学术练习或自学练习,请阅读以下内容:

Reasons to NOT use a PHP Framework?

大量 StackOverflow PHP 热门帖子和 Programmers.StackExchange 帖子可以帮助您完成旅程。

这里有几个开始:

(这更多是对这些链接中大多数讨论内容的概述)

阅读您所在领域的安全实践。它在不断发展。

如果您对框架感兴趣,这里有一些受欢迎的框架可以引起您的兴趣:

但是,不管怎样——祝你好运!

【讨论】:

  • 非常感谢,我将浏览每个链接..但是在发布前 2 天更改数据库查询或框架可能会很忙..如何迁移?....我想知道哪个框架会更好地学习工作:zend 或 cakephp 或 yii 或 codeigniter 或 Symfony 或 Kohana?
  • @user2216267,不客气。虽然我认为这些问题本身应该发布,但如果您在发布前 2 天 迁移(这令人难以置信),mysqli 将是您最好的选择,因为它与PHP 中较旧的 mysql 函数。事实上,它们就是为此目的而设计的。至于工作部分,我再次认为您应该提出另一个问题,但如果您想要适销对路,Zend 和 CakePHP 一样好。其他人是相对较新的人,但有很好的新闻报道。在一天结束时,阅读它们,涉足一点,你就会知道。
【解决方案2】:

我建议审查OWASP's 网站以获取网络安全相关信息(甚至加入OWASP)。

此OWASP section 提供PHP-related information。

【讨论】:

    【解决方案3】:

    使 PHP 应用程序安全是一个相当复杂的过程。编写应用程序时需要考虑很多事情,而 SQL 注入并不是唯一的威胁。

    我建议参考以下有用的文章:

    25 PHP Security Best Practices For Sys Admins

    How to secure your php application?

    PHP Security Cheat Sheet

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      相关资源
      最近更新 更多