关于 URL 权限越权问题的解决思路

本贴最后更新于 3307 天前,其中的信息可能已经斗转星移

在原生 php 上,虽然可以用 if else 做到权限粒度到按钮的可见与不可见

有个问题是

1:如果用户知道了操作某个资源的 url(例如知道点击添加后,url 地址是如何的),但是添加按钮对用户本人并不可见,这时可以直接在浏览器上输入 url 进行越权操作

2:解决这个问题的思路,可以用如下办法来进行处理,
在头部添加
if($_SERVER['HTTP_REFERER']=="")
{
header("Location:main.php");
exit;
}
即可,虽然用户直接在 url 输入会被直接跳转到指定页面,但是用户可以伪造 http 头进行提交,或者想办法制造一个 a 标签,href 到指定 url,然后点击这个 a 标签就又可以越权操作了

要完全解决 url 越权问题,最好的办法有哪些呢?求思路

@88250

  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    181 引用 • 408 回帖 • 483 关注
  • 权限
    24 引用 • 67 回帖
  • URL
    11 引用 • 30 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    服务端校验用户,然后看这个用户是否允许进行该操作。

  • pianopaper
    作者

    @88250 用什么校验呢?要给该用户分权限,应该是怎么个分法呢?以什么为准?类别 id?写入特定的 url?还是其他的什么?

  • zonghua

    HTTPREFERER 很容易伪造的好不好

  • blague

    +1,只能服务端校验。我现在用的是 Spring AOP 做 service 级别校验

  • pianopaper
    作者

    @blague 因为是原生 php 纯手写的而校验,而不知道里面的校验一些细节是如何的,想求一个比较明确的思路

  • blague

    @pianopaper 写一个单独的校验 PHP,然后里面在检查用户的权限,然后在每个 php 文件头里引用。。。土方法,似乎很多 PHP 程序都这么干

  • pianopaper
    作者

    @blague 目前权限思路是全部存库,不做任何写死在代码里的方案,不然到后面就麻烦大了

  • blague

    @pianopaper
    嗯啊。肯定这么干啦。

    把每个请求的路径(需要拦截的)存到数据库里,然后给角色分配这个路径。

    在校验里,校验当前请求的路径是否存在于这个用户的权限范围内.

    都是这么干的吧。

  • pianopaper
    作者

    @blague 路径是指 url 要解析后,然后与 db 的进行校验对吧?

  • blague

    @pianopaper
    嗯啊。

    我现在是把用户的权限放到会话里 😄

  • 88250

    @pianopaper URL 不会变吧,代码抽取一下尽量公用应该萌萌哒的啊

  • pianopaper
    作者

    @88250 按照目前的思路来看要解决这个问题,分析 url 并做解析(拆出页面与各个参数),然后和 db 中的进行匹配是必不可少了...

  • blague

    @pianopaper 或者不想这么干的话。

    可以不拆 URL 啊。

    可以在每个 PHP 里面定义一个标量,存放所需权限(可以是集合类型嘛)。

    然后再对比嘛 😂 😂 😂

  • pianopaper
    作者

    @blague 目前每个 php 页面可能会涉及多个操作,没有一个 php 页面就单一功能的,这样权限分起来就多了

  • blague

    @pianopaper 这种方法级别的拦截....不用 AOP 我都不知道怎么办了。

  • pianopaper
    作者

    @blague AOP 概念有没有什么书籍推荐一下

  • yangyujiao

    我们是在数据库中有一个权限表,控制每个类型的用户可以访问的 url。如果两中类型的用户都可以访问这个 url,然后里面还有个别按钮是分类的,那就 if——else 判断。

  • noah

    method control

  • Angonger

    我们操作级别的都放在页面了,权限只控制到了页面级别

  • pianopaper
    作者

    @noah 看来原生 php 控权限问题还是很多么,MVC 就比较容易

  • junze

    基于 PHP 的 auth2.0 http://blog.csdn.net/newjueqi/article/details/7845282 你可以看看

  • wizardforcel

    controller 首先要判断用户权限。

    controller 首先要判断用户权限。

    controller 首先要判断用户权限。

请输入回帖内容 ...

推荐标签 标签

  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 649 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 10 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    118 引用 • 54 回帖 • 3 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 81 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 636 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 498 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    167 引用 • 1129 回帖 • 3 关注
  • Excel
    31 引用 • 28 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 4 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 2 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 447 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖 • 1 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖 • 1 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 117 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 60 关注