第 30 章 Web Service Security

<?php
/*
* =====================================
* Website: http://netkiller.github.com
* Author: neo <netkiller@msn.com>
* Email: netkiller@msn.com
* =====================================
*/

class Logging {
	protected $file;
	public function __construct($logfile = "/tmp/debug.log"){
		$this->file = fopen($logfile,"a+");
	}
	public function __destruct() {
        //fclose($this->file);
    }
	public function close() {
        fclose($this->file);
    }
	private function write($msg){
			fwrite($this->file,date('Y-m-d H:i:s').' '.$msg."\r\n");
	}
	public function info($msg){
		$this->write(__FUNCTION__.' '.$msg);
	}
	public function warning($msg){
		$this->write(__FUNCTION__.' '.$msg);
	}
	public function error($msg){
		$this->write(__FUNCTION__.' '.$msg);
	}
	public function debug($msg){
		$this->write(__FUNCTION__.' '.$msg);
	}

}

class Permission{
	protected $_PERMISSION = array();

	public function __construct($login){
		$test =
		array(
			'neo' => array(
				'News'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					),
				'RSS'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					)
				),
			'jam' => array(
				'News'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					),
				'RSS'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					)
				)
		);
		//print_r($test);
		$this->load($test[$login]);
	}
	public function load($arr){
		$this->_PERMISSION = $arr;
	}

	public function is_allowed($class, $fun){
		$class 	= trim($class);
		$fun 	= trim($fun);
		//echo $class, $fun;
		//print_r($this->_PERMISSION);
		if(array_key_exists($class,$this->_PERMISSION)){
			if(array_key_exists($fun,$this->_PERMISSION[$class])){
				if($this->_PERMISSION[$class][$fun] == 'Y') return true;
				//return in_array("Y",$this->_PERMISSION[$class][$fun]);
			}
		}
		return false;
	}
	public function is_denied($class, $fun){
		return (!$this->is_allowed($class, $fun));
	}
	public function scan(){
		return true;
	}
}

class News extends Permission{

	private $logging;
	public function __construct(){
		parent::__construct('neo');
		$this->logging = new Logging('/tmp/news.log');
	}
	public function __destruct() {
		$this->logging->debug('news->get permission denied!!!');
		$this->logging->close();
    }
	public function add(){
		if(!$this->is_allowed(__CLASS__,__FUNCTION__)) return;
		print("Allowed!!! \r\n");
		$this->logging->info('news->add ok');
	}
	public function get(){
		if( $this->is_denied(__CLASS__,__FUNCTION__)) {
			print("Denied!!! \r\n");
			$this->logging->warning('news->get permission denied!!!');
		}

	}
}

$news = new News();
$news->add();
$news->get();

30.1. 权限控制与实现

权限来自下面数组数据,这里仅仅提供一个例子,管理权限你可以单独实现一个class,实现供权限管理功能,最终后转化为下面的数据结构即可。例如你可以将权限写入数据库,最终拼装如下数字让Permission顺利load即可。

array(
			'neo' => array(
				'News'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					),
				'RSS'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					)
				),
			'jam' => array(
				'News'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					),
				'RSS'=> array(
					'add' => 'Y',
					'remove' => 'N',
					'update' => 'Y'
					)
				)
		);		

public function is_allowed($class, $fun) 用户判断权限是否合法。

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

时间: 2024-10-01 10:09:05

第 30 章 Web Service Security的相关文章

Web Service 接口安全与解决方案

12.7.1. 接口安全问题 来源IP控制,即黑白名单,获取IP地址需要考虑X Forward for IP计数器,单位时间内IP访问次数达到阀值,就提示稍后连接 用户名密码认证 动态验证码 证书加密 md5/sha1 数字摘要 校验 SSL / TSL 证书加密 12.7.2. 访问接口协议 机遇http的实现方式有下面几种. http协议传统post/get 方式 soap 简单对象访问协议 xmlrpc 机遇xml的协议 json 近年来兴起的一种数据序列化传输方法 http无状态协议,不

通向架构师的道路(第十四天)Axis2 Web Service安全之rampart

一.加密保护我们的web service传输 在上一天的教程中,我们讲了一个简单的基于" security-constraint"的以指定用户名和密码来保护一个Web Service以及如何用https对这个web service的通讯过程进行保护.虽然它用https来进行保护了,但是我们抛开https,这个web service之间传输的用户名,密码,数据都是明文的. 在我之间教程中曾经提到过,有一种黑客工具叫作sniffer,或者使用MIM-ATTACK(中间件拦截)的方式,也是可

利用Geronimo 2.2创建安全的Web Service应用

随着 Web Service 应用越来越广泛, 如何保证服务能够安全的访问和传输,也逐渐引起开发人员和用户的关注.Web Service 的安全可以从两方面考虑:访问安全和传输安全 ..前者主要指只有授权用户可以访问应用, 而后者侧重于在消息传输过程中如何保证消息的私密性和完整性.本文介绍了如何在 Apache Geronimo 开发和部署安全的 Web Service 应用,以确保信息交互的安全,将侧重介绍如何基于 HTTP/HTTPS 协议保护 Web Service 应用访问和传输的安全.

039_《Delphi6.Kylix2.SOAP.Web Service程序设计篇》

<Delphi6.Kylix2.SOAP.Web Service程序设计篇> Delphi 教程 系列书籍 (039) <Delphi6.Kylix2.SOAP.Web Service程序设计篇> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 附书源码 作者: 李维 丛书名: 李维作品系列 出版社:机械工业出版社 ISBN:7111099095 上架时间:2002-3-22 出版日期:2002 年3月 页码:412 版次:1-1 内容简介 本书是

《SOA Web Service合约设计与版本化》—第1章1.9节附加说明

1.9 附加说明SOA Web Service合约设计与版本化下面各小节介绍由Prentice Hall出版的"Thomas Erl面向服务计算系列"丛书所提供的补充信息和资源. 1.9.1 本丛书官方站点在http://www.soabooks.com上可以找到关于本丛书中所有书的最新信息以及各种不同的支持资源.请一定别忘了查看更新.勘误和资源(比如补充的张贴图). 1.9.2 Visio模板Prentice Hall提供了一个Visio模板,其中包含了本丛书中各书使用的彩色符号.

《SOA Web Service合约设计与版本化》—第1章1.4节本书不涉及的内容

1.4 本书不涉及的内容SOA Web Service合约设计与版本化本书要讲解的只是关于Web服务合约的内容.它探索了与Web服务合约的开发.设计和版本化,以及与相关消息设计主题有关的大范围的各种技术和技巧.然而,本书并不会深入到Web服务程序的开发或者实现.因此,许多用于"连线"(wire)上的主题并没有包含在其中,比如可靠消息传递.安全和事务等. 类似的,虽然本书的内容属于SOA这个大的环境之中,但是其中只有一章用来解释SOA的基本术语和概念.如果你是刚刚涉足SOA,那么请务必提

《SOA Web Service合约设计与版本化》—第1章1.8节符号、图形和风格约定

1.8 符号.图形和风格约定SOA Web Service合约设计与版本化1.8.1 符号图例本书包含了一系列的图表,也就是书中所提到的"图".在所有这些图表中使用的主要符号在彩色插页中逐个进行了描述. 1.8.2 突出显示的代码书中有突出显示的代码.通常来说,突出显示的代码是同当前正在讨论的话题相关的. 1.8.3 要点总结本书的大多数主要章节之后都会提供一个列表形式的简明概要.有些内容较少或者非常易懂的章节则没有提供这样的专门总结. 本文仅用于学习和交流目的,不代表异步社区观点.非

《SOA Web Service合约设计与版本化》—第1章1.2节本书的目标

1.2 本书的目标SOA Web Service合约设计与版本化总体来说,本书中的章节是带着下列主要目标来撰写的: 在SOA的上下文中来论述Web服务合约相关的技术:突出介绍经过验证的合约相关技术,以及用于合约设计和版本化的模式:展示第一代Web服务技术(WSDL.SOAP.XML Schema)如何同诸如WS-Addressing(Web服务寻址)以及WS-Policy(Web服务策略)这样的WS-*技术一起工作:突出介绍各种不同Web服务技术的应用如何会受到SOA设计原则和模式的影响.本文仅

《SOA Web Service合约设计与版本化》—第1章1.3节读者对象

1.3 读者对象SOA Web Service合约设计与版本化本书可以被用作下列类型读者的教材或者参考书: 想要学习如何在SOA项目中使用Web服务技术的开发人员:想要学习如何为了支持SOA项目来设计Web服务合约的架构师:想要学习服务合约版本化的治理(governance)专家:想要更好地理解如何构建Web服务合约来支持面向服务的SOA实践人员:想要对现代Web服务合约与消息底层的概念和机制有更深入了解的IT专业人员.本文仅用于学习和交流目的,不代表异步社区观点.非商业转载请注明作译者.出处,