Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Drupal:对php脚本的访问权限?

Drupal:对php脚本的访问权限?
EN

Stack Overflow用户
提问于 2010-07-14 10:40:22
回答 3查看 1.6K关注 0票数 0

我正在我的Drupal网站上写一个自定义的php代码。我需要从PHP加载特定页面的内容。

这些页面只对经过身份验证的用户可见,而且我似乎无法从php访问它们,即使我以用户身份登录时触发了脚本。

有没有一种方法可以模拟来自php的“登录”用户,这样我就可以访问网站的所有内容了吗?

更新

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
global $user;
if (user_access('access content')) {

require_once("dompdf/dompdf_config.inc.php");

$html = file_get_contents('http://mywebsite.com/admin/store/orders/45/invoice/print');


$dompdf = new DOMPDF();
$dompdf->load_html($html);

//$dompdf->load_html_file('invoices/' . $file);
$dompdf->render();
$dompdf->stream("sample.pdf");
}

我试过相对路径,这是一样的.

这与模拟管理用户有关。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//access as administrator
global $user;
$original_user = $user;
session_save_session(FALSE); 
$user = user_load(array('uid' => 1));

//generate pdf
require_once("dompdf/dompdf_config.inc.php");
$html = file_get_contents('http://mywebsite/admin/store/orders/45/invoice/print');
$dompdf = new DOMPDF();
$dompdf->load_html($html);
//$dompdf->load_html_file('invoices/' . $file);
$dompdf->render();
$dompdf->stream("sample.pdf");

//logout as administrator
$user = $original_user;
session_save_session(TRUE); 

尽管如此,我还是拒绝了作为结果页面的访问(并生成pdf)。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-14 18:41:56

这些页面只对经过身份验证的用户可见,而且我似乎无法从php访问它们,即使我以用户身份登录时触发了脚本。

Drupal检查用户是否拥有使用全局变量$user查看节点的权限。要做您想要做的事情,如果您不能相信当前登录的用户拥有查看您感兴趣的节点的权限,则应该阅读安全地模拟另一个用户

我不是说你应该这么做。在模拟另一个用户之前,我将验证以下方法是否是唯一可能的方法。例如,如果只需要访问节点中包含的字段,则可以使用node_load(),这不会验证当前用户是否可以查看加载的节点。如果需要显示节点的主体,可以使用以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$node = node_load($nid);
if ($node) {
  $body = check_markup($node->body, $node->format, FALSE);
}

但是,显示当前用户无法访问的信息被认为是一个安全问题。

更新

代码的问题在于您正在使用file_get_contents('http://mywebsite/admin/store/orders/45/invoice/print');这样做,您将打开到站点的新连接,并且新连接将以匿名用户的身份打开。这就是不返回通过身份验证的用户能够看到的节点的原因。

即使代码能够工作,您所得到的并不是HTML只呈现节点,而是整个页面,包括Drupal通常显示在顶部和左侧/右侧的块。

如果您有兴趣呈现一个节点,那么您应该使用以下代码。(它只是一副骨架,而且还不完整。)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// $nid is the node ID.
// Check the result, in the case the node has been deleted, or there are other errors.
$node = node_load($nid);
if ($node) {
  // The arguments tell the function that you don't want to render a teaser, that the node is
  // rendered as it is the only node in the page, and that you don't want the additional
  // links that are usually rendered after the node content.
  $html = node_view($node, FALSE, TRUE, FALSE);

  // This is your code.
  $dompdf = new DOMPDF();
  $dompdf->load_html($html);
  $dompdf->render();
  $dompdf->stream("sample.pdf");
}
票数 1
EN

Stack Overflow用户

发布于 2010-07-14 12:28:53

这样做的守则是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
if (user_access('access content')) {
  print "You have the permission 'access content'";
}
?>

运行绕过权限系统的代码看起来既简单又容易,但实际上是一个严重的安全漏洞。

但是,既然这就是你所要求的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
global $user;
if ($user->uid) {
  print "You are a registered user"
}
?>

但是,不要将此用作权限的替换。

票数 2
EN

Stack Overflow用户

发布于 2010-07-15 11:27:49

关于更新的代码。您的file_get_contents将以“匿名用户”的身份输入内容。这就是为什么您的代码不是一个好主意的原因之一:

每当您的代码运行时,它都会打开您自己的站点并解析该代码:结果至少会加载两个"Drupals“:实际上至少有两个页面视图来向用户显示一个页面。但是,这种方法还有更多的问题。

相反,您应该找到在http://mywebsite.com/admin/store/orders/45/invoice/print上创建页面的代码/函数,并将其用作PDF-创建者的输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3249305

复制
相关文章
怎样在ios上上架app
在上架App之前想要 真机测试的同学 请查看 iOS- 最全的真机测试教程 里面包含怎么让多台电脑同时 上架App和同时真机调试。P12文件的使用详解
iOS程序应用
2023/01/13
5330
在iOS上推流
编译librtmp需要用到openssl,所以先编译openssl,下载脚本OpenSSL。
Helloted
2022/06/07
8650
在iOS上推流
译 | 在 App Service 上禁用 Basic 认证
App Service 使用网站的发布配置文件中的基本身份验证凭据访问 FTP 和 WebDeploy。这些API非常适合浏览站点的文件系统,上传驱动和应用程序,以及通过MsBuild进行部署。但是,企业通常需要满足安全要求,而宁愿禁用此基本身份验证访问,以便员工只能通过由 Azure Active Directory(AAD)支持的API来访问公司的 App Services。
Edi Wang
2020/09/14
1.8K0
译 | 在 App Service 上禁用 Basic 认证
在CentOS/RHEL7上禁用IPv6
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/80996364
shaonbean
2019/05/26
2.2K0
iOS 的系统类信息在栈上?
前言 今天有位群友抛出了一个很有意思的问题:为什么系统类的 class 地址比栈区变量更高? image-20210519235852843 iOS 进程内存布局 通常情况下,我们对进程内存的布局
酷酷的哀殿
2021/06/22
8100
iOS 的系统类信息在栈上?
在安卓手机或Win电脑上同步iOS上的日历
说说我的需求:我平时都是我的iPad上添加我日常的日程,但是如果要到电脑或安卓手机上也有同样的日历就比较不方便。
可定
2020/04/21
4.3K0
在安卓手机或Win电脑上同步iOS上的日历
在ios系统上实现更改IP地址
在当今的互联网环境中,我们经常需要更改手机的IP地址来避免一些限制或保护我们的隐私。然而,在iOS系统上,更改IP地址并不像在其他平台上那么容易。因此,本文将分享一种简单的方法,帮助您在iOS系统上免费更改手机的IP地址。
华科云商小徐
2023/09/14
1.9K0
如何定时自动关闭消息框?
我们知道,在VBA中可以使用MsgBox方法来弹出消息框,然而需要单击其中的“确定”按钮来使程序继续运行或进行其他操作。如果想要自动关闭消息框,如何实现?
fanjy
2023/10/23
4990
如何定时自动关闭消息框?
VBA: 自动定时关闭消息框
文章背景: 在VBA中创建弹窗对话框,可以使用MsgBox函数;但是该函数得到的消息框,必须手动关闭它。下面介绍一个未公开的Windows API函数,可以使用该函数得到一个自动定时关闭的消息框。
Exploring
2022/12/18
3K0
Flutter在Mac上搭建IOS开发环境
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
越陌度阡
2020/12/16
1.5K0
Flutter在Mac上搭建IOS开发环境
在 Debian Stretch 上设置自动升级
不少博主,出于安全、稳定的考虑,在自己的服务器上使用了 Debian 操作系统。我们知道,对于多数应用环境,特别是 LNMP 环境,绝大多数安全更新可以自行安装,本文我们将详细介绍,如何在 Debian 环境下自行下载安装最新的系统安全补丁。
Debian中国
2018/12/21
8970
iOS上架的坑
昨天在上线的时候遇到了一个坑,最后导致的结果是找了好几个小时,直接到半夜才能上线。
iOS程序应用
2022/11/21
2640
在 Windows 上搭建 MQTT 消息服务器
MQTT 已经是物联网事实上的标准通信协议。在目前市面上提供的各类开源 MQTT 服务器中,最常见的是 Linux 平台为基础,对于 Windows 平台的支持较少,即使支持也存在性能较弱、功能单一、版本兼容性等问题。
EMQ映云科技
2022/09/22
4.6K0
CSS中的float定位技术在iOS上的实现
几乎所有会WEB前端开发的同学都知道CSS中有一个float属性用于实现HTML元素的浮动定位展示。float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围。不过在 CSS 中,任何元素都可以浮动,假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。 浮动布局主要用于那些图文环绕以及实现一些界面不规则排列的场景,并且浮动定位技术在WEB前端开发中应用的非常普遍。
欧阳大哥2013
2018/08/22
2.2K0
CSS中的float定位技术在iOS上的实现
Django messages 消息(上)
在网页应用中,经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户。
小团子
2019/07/18
6810
Django messages 消息(上)
Linux 上如何禁用 USB 存储设备
为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。
Debian中国
2018/12/20
10.1K0
iOS自动化探索(八)Mac上的Jenkins安装
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
周希
2019/10/15
6100
iOS自动化探索(八)Mac上的Jenkins安装
你可曾想过在iOS上跑Linux?
你可曾想过在IOS设备上运行Linux系统?或者用shell来传输文件、编写脚本,又或者使用Vi来开发代码?
FB客服
2018/12/18
3.9K0
你可曾想过在iOS上跑Linux?
在Ubuntu 20.04中禁用motd欢迎消息
本篇文章重点讲解一下在Ubuntu 20.04中禁用motd欢迎消息具体方法,有需要的小伙伴可以参考一下。
会长君
2023/04/25
2.6K0
在越狱后的iOS上运行QEMU虚拟机~
你也许不知道QEMU 但你有可能知道UTM这个iOS端的虚拟机 UTM就是以QEMU为后端的一个虚拟机 简单说 就是iOS上带GUI界面的QEMU 但是由于苹果限制 UTM并不能发挥很好的性能 所以如果你很想高速在你的设备上跑虚拟机 可以参考这篇教程 准备: 1.一台手机(必须已越狱) 2.QEMU已编译好的二进制包(由@LMY提供) 下载地址:[buttona=www.icloud.com/iclouddrive/0_DjmcFdJlCvHyBdvQwbl_0qg#qemu]点击进入[/button]
axiomxs
2021/11/26
2.4K0

相似问题

呈现表单中的List<Model>并将其发送给控制器

12

检测控制器中的视图或PartialView

20

上传文件并通过ajax - jQuery将其发送给控制器。

11

返回PartialView覆盖整个视图的控制器

23

实现MFMailComposeViewControllerDelegate并将其添加到视图控制器中

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文