探讨.net安全机制(和java的区别)

屌丝女士111 2009-09-10 09:21:21
如题
...全文
255 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
tulong403 2009-09-16
  • 打赏
  • 举报
回复
第一部分 安全配置和代码封装

  安全配置

  两个平台的配置都是通过XML或纯文本文件,两个平台最大的区别在于处理安全配置体系的方式不同。

  在.NET平台,有图形接口和命令行二种方式来修改安全配置参数。Mscorcfg.msc是图形接口方式,Caspol.exe提供了命令行方式,适用于批处理或配置文本。

  JAVA平台只提供了图形接口的工具policytool.exe。和.NET不同的是,它的目标对象(配置文件)的名字和位置不是固定的。

  .NET定义了不同范围的安全配置文件:系统范围,本机范围,本用户范围。在配置有冲突时,原则上小范围的参数有优先权。

  JAVA和J2EE的核心配置文件都保存在固定位置,但扩展配置文件随厂家不同而不同。

  代码封装:检验

  JAVA 和.NET 的Common Library Runtime (CLR) 都实行内存安全或类型安全的保护机制,在这些平台开发的应用的安全性也是可以检验的。他们的实现机制有很大的不同。

  在.NET, CLR总是执行编译好的代码,它不解释代码。但是在中间语言(IL)被编译之前,编译器会有验证和检验的步骤。第一步是检查文件的结构和代码完整性;第二步包括一些扩展的检查,内存安全、堆栈跟踪、数据流分析、类型检查等。在运行阶段,由VES (Virtual Execution System) 来负责安全性检查和出错意外情况处理。

  在JAVA平台,JAVA虚拟机(JVM)负责类的载入、链接、检验和执行。对于已经编译和优化的代码,JVM也用二个无条件调用堆栈来保留最初的字节代码信息。

  小结:和.NET不同,JVM的默认设置是不检验本地代码。另外,JVM保留最初的字节代码供运行时检查,而.NET把静态分析和运行时插入检验代码相结合。

  代码封装:应用隔离

  在.NET, 域隔离建立在内存安全机制的基础上,不同的域不能直接访问彼此的地址空间,只能通过.NET远程通信机制访问。

  在JAVA平台,应用隔离是通过ClassLoaders 和 ProtectionDomains 相结合来实现的,安全类加载是JVM安全机制的基石。

  小结:.NET的 AppDomains 就象操作系统的进程一样,使用起来比JAVA的 ProtectionDomains 更直接、容易一些。

  代码封装: 语言特征

  两个平台基本上差不多,.NET在灵活性上稍微好一点。

  总结:

  JAVA在安全配置上有较多的优势,.NET在代码封装的选择性和易用性好一些。

  第二部分 加密和通信

  加密法:概论

  .NET的加密法主要基于CryptoAPI 和相关扩展。大多数有关加密的类都在System.security.Cryptography, X509Centificates 和XML中。.NET利用基于流的模型来完成加密传输,所有的算法都被默认为最高的安全级别。.NET也允许用户自己在 machine.config 中定义自己的算法。
屌丝女士111 2009-09-16
  • 打赏
  • 举报
回复
做模拟自动登陆的 好几个网站 java 和 .net 的,我测试和我放在别人机器上测试都ok ,但是放在服务器上,向.net 网站提交http 发送请求 返回给我的都是错误的页面!!!

在自己的机器上都不回出现这样的问题?所以我想讨论下安全机制的问题~到底是我代码的问题?还是那个环节出了问题??
屌丝女士111 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wanglltulong 的回复:]
做模拟自动登陆的 好几个网站 java 和  .net 的,我测试和我放在别人机器上测试都ok ,但是放在服务器上,向.net 网站提交http  发送请求 返回给我的都是错误的页面!!!

在自己的机器上都不回出现这样的问题?所以我想讨论下安全机制的问题~到底是我代码的问题?还是那个环节出了问题??
[/Quote]

LutzMark 2009-09-11
  • 打赏
  • 举报
回复
安全是相对的
up
dafuw 2009-09-11
  • 打赏
  • 举报
回复
好复杂。。
屯里的人 2009-09-11
  • 打赏
  • 举报
回复
socket是基于TCP和UDP协议的高层接口,定义了收发数据的格式。Java的TCP服务中使用的Socket是一种流机制,即对于编程人员来说,处理socket只需要从Socket中获取流,然后可以像处理本地流一样来进行数据的收发。
例如:


DataOutputStream outToClient =new DataOutputStream(socket.getOutputStream());
BufferedReader inFromClient =new BufferedReader(new InputStreamReader(socket.getInputStream()));
String requestMessageLine = inFromClient.readLine();
outToClient.writeBytes(requestMessageLine);


.Net的Socket机制提供了两种实现:一种是直接用Socket类,一种是使用对Socket再次封装的TcpClient,UdpClient类来实现。.Net提供了一种统一的收发机制:NetworkStream。

TcpClient和Socket的底层都是通过NetworkStream来传送数据的。它们都可以产生一个NetworkStream。例如:


TcpClient client = server.AcceptTcpClient();NetworkStream stream = client.GetStream();


.Net的socket和Java的socket在收发数据上的最大不同是:Java的socket可以像普通的流一样操作。.Net的socket有多种实现方法,可以直接用Socket.send()来发,也可以用NetwordStream来发送,也可以用TcpClient来发送。但是每种实现在收发数据的时候都是通过显示的对缓冲区进行操作。例如:


byte[] datasize = new byte[4]; networkStream.Write(datasize,0,4);socket.Send(datasize, 0,datasize.Length, 0);

编程有钱人了 2009-09-11
  • 打赏
  • 举报
回复
安全是想对的

和C++说
c# 你“安全的”
对于内存的访问可谓是XXX了
屌丝女士111 2009-09-11
  • 打赏
  • 举报
回复
不要沉啊 .........
24K純帥 2009-09-10
  • 打赏
  • 举报
回复
zjybushiren88888 2009-09-10
  • 打赏
  • 举报
回复
学习.
红街咖啡 2009-09-10
  • 打赏
  • 举报
回复
级别都高不可测。
屌丝女士111 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sbwwkmyd 的回复:]
都是基于TCP/IP的,没有逻辑漏洞的话都一样安全.
[/Quote]

逻辑漏洞? 是程序问题造成的逻辑漏洞麽?
cwmwss 2009-09-10
  • 打赏
  • 举报
回复
学习
sxmonsy 2009-09-10
  • 打赏
  • 举报
回复
这个题好大呀。。。。
showjim 2009-09-10
  • 打赏
  • 举报
回复
都是基于TCP/IP的,没有逻辑漏洞的话都一样安全.
CODE163 2009-09-10
  • 打赏
  • 举报
回复
......
王者coco 2009-09-10
  • 打赏
  • 举报
回复
学习
migercai 2009-09-10
  • 打赏
  • 举报
回复
学习
sunzhong2003 2009-09-10
  • 打赏
  • 举报
回复
.net和JAVA怎么能一起比,.NET是个框架,JAVA是个语言,最多和C#比下
加载更多回复(9)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧