ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

一些库操作会通过产生代码并且运行它来为调用者完成一些操作。最基本的问题就是产生代表更少信任度的代码并且在拥有更高信任度的代码中来运行它。在调用者能够改变代码生成的时候,这个问题会继续得到恶化,因此你必须确保只有你认为是安全的代码才能够被生成。

你需要确切地知道到你一直都生成了什么代码。这表示你必须严格地控制你从用户那里所获取的任何值,让它们变成被引号包围的字符串(应该进行编码,因此它们不能够包括未预料的代码元素)、标识符(应该通过检查来核实它们是有效的标识符)、或者是别的什么。另外,标识符可能是危险的,因为一个已编译的汇编集能够被更改,因此它的标识符中会包含奇特的字符,从而会对它产生破坏(虽然这是很罕见的一个安全弱点)。

建议你使用反射散发来生成代码,这经常可以帮助你避免许多这样的问题。

在你编译代码的时候,考虑是否存在恶意程序可能会通过某种方式来对它进行更改。是否有恶意代码能够在编译器读取磁盘上的源代码之前或者在你的代码装载 .dll 文件之前对其进行更改?如果是这样,那么你就必须保护包含这些文件的目录,并且适当地运用代码访问安全或者文件系统中的访问控制列表(ACL)。

如果调用者以能够导致编译器产生错误的方式来改变被生成的代码,那么这同样有可能存在一个安全弱点。

在最低的许可设置中运行被生成的代码,并且使用 PermitOnly 或者 Deny。

posted on 2007-02-16 22:28  Laeb  阅读(175)  评论(0编辑  收藏  举报