[asp.net mvc 奇淫巧技] 05 - 扩展ScriptBundle,支持混淆加密ja
一、需求:在web开发中,经常会处理javascript的一些问题,其中就包括js的压缩,合并,发布版本以及混淆加密等等问题。在asp.net 开发中我们使用ScriptBundle已经可以解决javascript遇到的大部分问题,其中包括合并压缩发布版本的问题。 关于ScriptBundle的简单应用,可以参考 asp.net?自带的ScriptBundle已经包含了大部分功能,但是无法实现javascript的混淆加密。在实际项目中,确实很多时候并不希望客户直接很容易的查看到javascript的源码,之前的做法都是把javascript的代码复制到混淆加密的网站,然后进行混淆加密再复制粘贴到项目中。这样做的效率及其低下,并且很容易出现不可预知的问题。 经常使用javascript混淆加密网站 既然asp.net?ScriptBundle已经为我们做了那么多对javascript的操作优化,可不可扩展ScriptBundle加一部混淆加密呢。答案是肯定的。 二、寻找 ScriptBundle 扩展点首先用ilspy查找源码,找寻扩展点,第一步打开System.Web.Optimization的dll,然后查询ScriptBundle。 在反编译ScriptBundle的类中,发现了一些关键信息(JsMinify),那就是说自定义一个类CustomScriptBundle继承Bundle,然后在构造函数中传入实现IBundleTransform接口的自定义混淆加密js的类CustomJsMinify。 这句话听起来有点绕口,简单点就是 1、新建一个类CustomScriptBundle继承Bundle CustomScriptBundle( virtualPath) : (virtualPath,
</span><span style="color: #0000ff;">public</span> CustomScriptBundle(<span style="color: #0000ff;">string</span> virtualPath,<span style="color: #0000ff;">string</span> cdnPath) : <span style="color: #0000ff;">base</span>(virtualPath,cdnPath,<span style="color: #0000ff;">new</span><span style="color: #000000;"> IBundleTransform[]
{
</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> CustomJsMinify()
})
{
</span><span style="color: #0000ff;">base</span>.ConcatenationToken = <span style="color: #800000;">"</span><span style="color: #800000;">;</span><span style="color: #800000;">"</span><span style="color: #000000;">;
}
}</span></pre>
2、新建一个类CustomJsMinify实现IBundleTransform接口并实现方法Process我们需要处理的javascript的源码就在Process方法中,在这里我们就可以对javascript源码进行压缩,混淆加密,或者加上copyright都可以。 下面的代码对每个javascript文件加上简单的copyright。 (context == ArgumentNullException( (response == ArgumentNullException( (!= += + ex.Message + +=
?3、在BundleConfig中配置javascript时用CustomScriptBundlebundles.Add( CustomScriptBundle(
4、在cshtml中引入方式不变 @Scripts.Render()
运行项目得到的结果是 在javascript代码开始处,加上了我们自定义的文字。 在运行项目时,记得把项目web.config中的debug改为false,因为默认情况下,debug模式javascript代码是不做处理的,因为debug状态下如果进行压缩合并或者混淆加密的话,那程序员就很难调试js代码了。 5、总结新建一个类实现IBundleTransform接口并实现方法Process,在方法Process中做你需要的处理即可。 三、寻找C#混淆加密javascript的代码或API我们已经知道怎么扩展ScriptBundle了,那现在要做的就是找到合理混淆加密javascript的C#代码或者API即可。 1、?可以实现js的混淆加密,开源免费 2、?国外的一个混淆加密网站,高级功能需要收费 3、?一个可以把javascript代码转成[]()!+字符 4、 小伙伴们可以根据需求选择不同的方式,一般第一种就可以。 如果需要特殊加密。可以使用第二种。 我们以第一个为例子 首先现在下载代码,然后按照上面的方式,最后实现Process方法处理javascript (context == ArgumentNullException( (response == ArgumentNullException( (!= ECMAScriptPacker(ECMAScriptPacker.PackerEncoding.Normal,,== + ex.Message + +=
得到的javascript结果为: 四、总结我们通过扩展ScriptBundle就可以很容易的对网站的javascript代码进行混淆加密,保护了javascript代码。 我们可以有很多种方式对javascript进行混淆加密,压缩等等操作,比如通过实现IHttpModule,也可以实现对javascript的操作。 通过扩展ScriptBundle的优点 1、可以继续使用ScriptBundle的压缩,合并和版本控制功能,只是在这些功能上进一步增加了混淆加密的功能。 2、不需要每次发布时粘贴复制至加密的网站,现在可以全部显示自动化加密。 3、使用优秀的加密SDK,可以更高的保护javascript源码。 4、可以随意在javascript上进行操作,比如增加copyright版本号等。 github: oschina: 本文原创,欢迎拍砖和推荐。 ?? 系列课程(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.Net程序员应该为代码灵感提供哪些其他框架?
- asp.net-mvc – 我必须附加什么进程才能使用IIS Express配置
- asp.net-mvc – 我什么时候应该在asp.net mvc应用程序中使用
- asp.net-mvc – MVC 3 RC中的Razor Helper
- asp.net-mvc – 我需要有关HandleError的更多信息
- asp.net-mvc – MVC DDD:可以将存储库与控制器中的服务一起
- .net – 多选列表框中的预选项目(MVC3 Razor)
- asp.net-mvc-4 – 使用knockout.js我需要从服务器调用更新我
- ASP.NET C#String.Split
- asp.net-mvc – 获取文件夹中的文件