关于反射的安全

问题描述

本来一个类中不想对外公开的都被私有化了,现在可以利用反射,去使用他们,我很是不能理解,这样会不会违背访问权限修饰符设置的初衷,会不会影响到安全

解决方案

解决方案二:
你想的问题是对的,反射确实可以访问到本来不应该访问的一些东西,但是在实践中,并没有太多影响安全的内容,至少到目前为止,都没有听说过有什么系统因为反射导致安全问题。
解决方案三:
自己写代码坑自己?
解决方案四:
你要是自己坑自己谁也拦不住!
解决方案五:
任何技术本身都是无所谓好不好,安全不安全的。。同理反射本身不存在安不安全的问题,关键在于你能不能用好反射导致问题的情况有很多,比如,通常一个类会对所有对外接口以及数据进行验证,以确保符合要求,但通常不会对其内部方法和数据做过多保护性验证判断,因为通常只要外部接口不出错,内部就不会有问题。这样是好,但是如果你乱用反射,胡乱修改这个类的内部方法和数据,那么就有可能严重影响这个类,从而可能导致一系列包括安全在内的问题。所以说反射这个东西要谨慎使用,而且不是迫不得已不要轻易使用,否则就只能后果自负了。
解决方案六:
可以设置SecurityManager
解决方案七:
一般反射只用来动态去new对象,不直接去使用类私有的属性,当然你要实现某些功能一定要使用那就是例外!就像刀子是一个工具,用的好就是工具,用不好就是凶器!

时间: 2024-09-07 13:39:11

关于反射的安全的相关文章

从反射看委托与事件 委托真的是一个类

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一 定的寻根究底,故用反射把委托的成员揪出来,且看如下代码: delegate void DelegateDemo(); static event DelegateDemo delHandle; static void Main() { delHandle += new DelegateDemo(MyDelegate_delHandle); MemberInfo[] mis = delHandle.GetT

JAVA核心层--反射--动态代理

本文发表于2010年,时间较早,部分问题解释不是十分准确,所以需要进一步了解,请参看2012年版本: java之架构基础-动态代理&cglib 要在JAVA技术上突破普通的层面,并拥有一翻设计理念的高度,除了要有很好的设计思维之外,反射在适当的使用下,将会把框架做得非常清晰,并且代码编写也非常简便. 在面向对象的编程中,我们为什么要忌讳去大量使用if else switch语句,因为这样写是将逻辑硬编码了,JAVA的思想就是将其配置化,一旦可配置化后,就逐渐可管理化,并随着产品的成熟逐步实现自动

程序集和反射(二)

上篇文章主要介绍了程序集的内容:程序集和反射(一),时隔这么久,今天终于腾出点时间,把反射部分的知识点给整理一下,不把这个写完,心里总觉得有点堵.对于反射,我相信很多人跟LZ一个德行,不会,所以不用,不用,所以永远不会.      通过System.Reflection命名空间中的类已经System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类.接口.值类型)的信息.您也可以使用反射在运行时创建类型实例,以及调用和访问这些实例.      程序集包含模块,而模块包含类型,类型又

Android中利用反射技术实现加减乘除

JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有 属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取 的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类: 在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和 方法:在运行时调用任意一个对象的方法:生成动态代理. 有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的

结合AJAX和反射Refrection,实现页面无刷执行函数体

ajax|函数|页面|执行 其实做这么个东西没什么具体用途,只是在看到这个帖子和这篇BLOG后来了兴趣,突发其想来试试能不能做个在线的编译器,顺便也研究下ajax和反射: ajax是看很长时间了,比较关注微软的开发包Atlas的动态,也有很多资源: ·MSDN的Atlas 网站 ·ASP.NET "Atlas" 官方网站 ·ASP.NET "Atlas" 预览文档 ·Atlas  快速入门教程 以上几个连接来自思归 的blog,看来他也很关心这项技术: 前面好长一段

C#反射技术的简单操作(读取和设置类的属性)

要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法. 首先建立一个测试的类 复制代码 代码如下: public class MyClass { public int one { set; get; } public int two { set; get; } public int five { set; get; } public int three { set; get; } public int four { set; ge

谈.NET反射的封装

.NET反射提供了在运行时获取对象类型元数据的途径,使程序可以动态地调用对象的属性.方法.动态性带来的代价是反射调用不像基于静态类型的直接调用那样简洁,且缺乏类型检查机制,失去了IDE智能提示,容易出错:于是,不少朋友尝试对.NET反射进行封装. 这个话题是仁者见仁,智者见智,这里我也谈谈自己对.NET反射封装的思路,请先看下面的示例代码: static void Main(string[] args) { Person liu = new Person("liu", 26); Ref

学习反射中的动态创建对象

Assembly的CreateInstance有三个重载,第一个参数需要是一个字符串表示的完整的类名.第二个参数是一个bool类型,如果为true,表示对第一个参数不区分大小写. 第三个: 影响执行搜索的方式的位屏蔽.此值是 System.Reflection.BindingFlags 中的位标志的组合. // binder: 一个启用绑定.参数类型强制.成员调用以及通过反射进行 MemberInfo 对象检索的对象.如果 binder 为 null,则使用默认联编程序.// args: Obj

简化繁琐的赋值——反射在Jdbc和Struts中的应用

缘起在Jdbc应用中,我们经常需要有这么样的一个Javabean:当我们从数据库里取值时,我们希望把对应的值赋给Javabean,而后再操作Javabean进行各种业务处理:而我们保存数据的时候,也希望把经过业务处理后的值赋给Javabean,再由该Javabean与Jdbc交互,将数据保存在数据库里. 而在Struts应用中,我们经常要跟ActionForm或DynaActionForm打交道,例如从业面取得用户输入的数据,在Struts应用中,我们实际上是从ActionForm中取得数据:而

对.NET Framework 反射的反思

清晰的组件化目标是否因在库间共享过多类型信息而落空?或许您需要高效的强类型化数据存储,但如果每次对象模型发展后都需要更新您的数据库架构,那会耗费很大成本,所以您更愿意在运行时推断出其类型架构吗?您需要交付能接受任意用户对象的组件,并以某种智能化的方式处理它们吗?您希望库的调方者能以编程方式向您说明它们的类型吗? 如果您发现自己在苦苦维持强类型化数据结构的同时,又冀望于最大化运行时灵活性,那么您大概会愿意考虑反射,以及它如何改善您的软件.在本专栏中,我将探讨 Microsoft .NET Fram