最近被扫了一个“内存加载clr程序集漏洞”,没给出解决方案,网上也没搜索到有价值的信息,有人能帮解释一下吗
这个需要深入研究下CLR内存管理。可以试下在Main方法上应用LoaderOptimizationAttribute特性,并指定LoaderOptimization为MultiDomain即可。采用对Foo类型Foo类型(typeof(Foo))对象加锁。
托管代码在被编译后部署在称作程序集的单元中。 程序集将打包为 DLL 或可执行 (.exe) 文件。 尽管可执行文件可以自动运行,但 DLL 必须在现有应用程序中承载。 托管 DLL 程序集可以加载到 Microsoft SQL Server中并托管。 SQL Server要求使用 CREATE ASSEMBLY 语句在SQL Server数据库中注册程序集,然后才能在进程中加载该程序集并使用。 还可以使用 ALTER ASSEMBLY 语句从较新版本更新程序集,或使用 DROP ASSEMBLY 语句从SQL Server中删除程序集。 你可以使用下面的TSQL语句来查询验证你的CLR程序集是否正确设置,或者寻找现有的用户自定义的CLR程序集。
USE msdb;
SELECT SCHEMA_NAME(so.[schema_id]) AS [schema_name],
af.file_id,
af.name + '.dll' as [file_name],
asmbly.clr_name,
asmbly.assembly_id,
asmbly.name AS [assembly_name],
am.assembly_class,
am.assembly_method,
so.object_id as [sp_object_id],
so.name AS [sp_name],
so.[type] as [sp_type],
asmbly.permission_set_desc,
asmbly.create_date,
asmbly.modify_date,
af.content
FROM sys.assembly_modules am
INNER JOIN sys.assemblies asmbly
ON asmbly.assembly_id = am.assembly_id
INNER JOIN sys.assembly_files af
ON asmbly.assembly_id = af.assembly_id
INNER JOIN sys.objects so
ON so.[object_id] = am.[object_id]
使用这个查询我们可以看到文件名、程序集名、程序集类名、程序集方法和方法映射到的存储过程。
评论
全部评论 (0)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
评论
全部评论 (0)