用 ISS Url 重写工具 屏蔽 图像盗链、窃取以及恶意剽窃

[原文发表地址]   Blocking Image Hotlinking, Leeching and Evil Sploggers with IIS Url Rewrite [原文发表时间]   2013-06-03   我最近发现一篇名为“谷歌 Chrome 浏览器”的博客转载了我的帖子。(当然,这与谷歌以及谷歌团队里友好的朋友们没有关系。) 这是一个splog或“垃圾博客”。这不像是一篇博客,更像是“将你的知识窃取之后再发布”。每篇博文基本上都是复制的或是通过RSS从别处引过来的。这种情况一周会有好多次,也连续好多年了。 尽管如此,这一特殊的网站在搜索时总是先于我的网站,让我感觉很不爽。 更糟糕地是,他们在Twitter上有近2.5万追随者。我跟他们说过好几次让他们不要再这样做了,但是这时我有点厌倦了。 他们甚至“盗链”了我的图片,这意味着我所有的PNG格式的图像仍然在我的网站上托管。当您访问他们的网站时,文字是从我的RSS中转过来的,但是我还要为我的图片带宽付费。这真是太有讽刺意味了。更何况在他们的网站上,我的版权声明是完好的 J。 当一个图片被链接到另一个域时HTTP_REFERER 顶部由图像被链接到的位置所填充。这意味着我的Web服务器从谷歌Chrome浏览器的博客上为“foo.png”获得请求,我可以看到要求该图像的页面。 例如: 1: Request 2: URL:http://www.hanselman.com/blog/content/binary/Windows-Live-Writer/How-to-run-a-Virtual-Conference-for-10_E53C/image_5.png 3: Request 4: Method:GET 5: Referer:http://google-chrome-browser.com/penny-pinching-cloud-how-run-two-day-virtual 由于这能够区分GET请求,这意味着我可以为此做点什么事情。由此带来几个重要的问题,一般来说我们需要记住这个网站,我感觉很多编程者都会忘记: 互联网并不是一个黑盒. 您可以对此做些什么。 据此,我想检测这些请求,并服务不同的图像。 如果我在用Apache,而且有一个.htaccess文件,我可能会这样做: 1: RewriteCond %{HTTP:Referer} 2: ^.*http://(?:www\.)?computersblogsexample.info.*$ 3: RewriteHeader Referer: .* 4: damn\.spammers 5: RewriteCond %{HTTP:Referer}…

0

在和子应用程序版本不一致时修改ASP.NET web.config配置文件中的继承权

[原文发表地址] Changing ASP.NET web.config inheritance when mixing versions of child applications [原文发表时间] 2013-03-26 我的博客和所有相关站点是混用.NET 2.0、3.5和4的。现在这个博客引擎http://hanselman.com/blog 用的是.net 3.5, 但是应用程序所在的根目录http://hanselman.com/ 用的是.NET4。 你可以很愉快的在一个IIS实例中跨.NET版本混用应用程序。 从旁边的截图你可以看到我怎么做的。 可是,当我让子/博客用.NET3.5(2.0 CLR),然后把父/应用程序改成.NET 4的时候,爆出了一大堆下面的错误: Unrecognized attribute ‘targetFramework’. Note that attribute names are case-sensitive. The targetFramework attribute was inherited from the root .NET 4 Web.config file in the Default Web Site root using ASP.NET configuration inheritance…

0

将旧的应用程序从IIS6转移到IIS8以及经典模式存在的原因

[原文发表地址] Moving old apps from IIS6 to IIS8 and why Classic Mode exists [原文发表时间] 2013-03-20 7:53 PM 今天我收到一个通过电子邮件发送的有趣的问题。这个问题用一句话概括就是: 我们已经成功地在旧版本的IIS和IIS 8.0 的经典模式下运行了一个程序,为什么ASP.NET运行时会在IIS 8.0里集成模式的程序池里出问题? 比起他们从IIS 6.0转移到IIS 8.0会引起人们的兴趣来,他们从经典模式的管道转移到了集成模式显得更为重要。 简而言之, 这些管道是不同的,如果你写了期望其中一种管道行为的一个程序,然后转移,那么当你把它转移到一个新的管道后,你一直遵循的行为将有可能不同。 IIS6是十几年前在Windows Server 2003 里发布的。应用程序一直用的是ISAPI管道。IIS6里的每一样东西本质上就是我们现在认为的“经典模式”,而不像IIS7里面较新的集成管道。 带ASP.NET的IIS6 有两个管道 –IIS非托管管道和托管ASP.NET管道。这里有一个简化过但是非常准确的图(如图所示): IIS7和8 是用更高级更快速的集成模式管道来重构的,但是为了兼容性它们保留了“经典”模式。 “医生,这样做会痛的哎” “不要那么做啊” 如果你正在把一个IIS6(从定义来看就是 只有“经典”模式)上的旧程序转移到IIS8上, 最快的决定是在IIS8的经典模式下运行它。经典模式是完全被支持的,所以运行经典模式你就不会做错什么了。这就是这个模式存在的原因。 考虑下您的理由,作一个深思熟虑的决定吧。 请记住,不考虑衍生出来的结果的话,当ASP.NET程序想要从在IIS6版本里的老的ISAPI托管模型转移到来自于IIS7较新的集成模型时, 有可能会发生不兼容和边缘情况的行为上的问题。 希望这能有所帮助。

0

新工具和新内容——ASP.NET,Visual Studio 11 Web和.NET4.5开发人员预览(含评注)

[原文发表地址]  New Tools and New Content – ASP.NET, Visual Studio 11 Web and .NET 4.5 Developer Preview (with commentary) [原文发表时间]  2011-09-16 21:22 当所有你们这些参加了Build大会的人获得了一个很棒的Tablet,而我却没有,这让我很郁闷(快卖给我吧!),“Angle Brackets团队”(我正在想更适合的名字)的人员忙得不可开交。 以下是我们团队这周在Build上宣布并展示的内容总结,这些内容在今天(9/16)就对公众开放了,并附加了一些你们的陈述。 他们在聆听 在做这个Visual Studio版本时,让我感到欣慰的一点是我们平稳地度过了许多的“精神减速障碍”。许多考虑被加入到work flow 和common scenario以避免干扰开发者。 让我感到很开心的是,团队终于意识到不是每个人都可以升级他们的Visual Studio,因此可以用旧版本打开新的project和solution。我可以使用Visual Studio 11 开发人员预览版打开一个.NET4应用程序,然后保存project,再将它在Visual Studio 2010中打开即可运行。这当然行得通。团队可以混合搭配,有时候测试版本团队人员会将solution文件导入,对其他人的开发造成破坏。 顺便说一句,你们看到过我们全新的组织图示吗? 重要方面:我们发布软件的所做的改变 Scott意见:值得注意的是,虽然在下一版的Visual Studio中有很多内容,其实在NuGet上的Azure/Web团队也在发布很多很棒的东西。当我们整合更多资源的时候,开发人员也就有了更多的选择,这就好比堆垒乐高积木一样。最重要的是,很多东西只会在NuGet上展示。我在想有没有可能在NuGet Feed上添加微软支持产品。人们有时认为NuGet用来投放binary的地方,因为这很方便,但我们还需要一种方法来判断NuGet包是否真的是提供支持的产品,有点像Twitter上“认证”的概念。我很希望你们能在评论版中发表对此的看法,如果你可以在NuGet项目网站的讨论区上发表意见,那就更好了。 通过NuGet发布新产品也很重要,因为这能使其与开放源库处于同一公平竞争环境。通过将信息放置在NuGet上,微软的开放源库会争相“吸引”我们开发人员的注意,大家可以选择自己所喜欢的。如果你想用Microsoft’s Ajax Minifier或者其他东西,那就直接从NuGet上获取。微软不会将资源发布在其他地方,除了在NuGet上。 Visual Studio 11开发人员预览版 周二发布了Visual Studio“Windows 8 Express”版,同时发布的还有支持Windows 8开发的Windows 8开发人员预览版。周三在Satya…

0

用SignalR创建实时永久长连接异步网络应用程序

原文发表地址: Asynchronous scalable web applications with real-time persistent long-running connections with SignalR 原文发表时间: 2011-08-29 09:29 我最近在研究异步和衡量的问题。你可能看过我之前写的博文:我研究的 node.js和iisnode在Windows上运行。 每个应用程序都有不同的要求,“衡量”的规则不是对每一种应用程序都适用的。衡量一个获取数据和循环的网络应用和那些召集深度潜在的主框架应用,保持服务器永久连接的应用是不一样的。 古语说“当你手上只有榔头的时候,看什么都像是钉子”,这个在编程和网络世界里的确是真理。工具越多并且掌握使用它们的技能那么效果就会越好。那也是为什么我不仅仅宣扬多种语言编程,还希望大家深入研究自己的主要语言。比如当你真正学会了LINQ,并且很擅长使用dynamic,C#就变成了一种更加有趣和富有表现力的语言。 更新是用榔头锤钉子的常见例子。想做一个聊天程序?每隔5秒更新一次。处理时间很长?那就丢掉动画图片,不停地更新,我亲爱的朋友! 间隔长一段时间来更新是另一种方法。简单来说就是打开一个连接然后保持打开状态,强制客户端(浏览器)等待,假装需要很长时间才能返回结果。如果你的服务器端程序模型上有足够多的控件,这就能允许你按照你期望的来返回数据在打开的连接上。如果连接断开了,连接会无缝地被重新打开,断开信息会在两个端口都隐藏掉。在WebSockets将会是另一种解决这类问题的方法。 ASP.NET中的永恒连接 在聊天应用程序或者股票应用程序中用ASP.NET做这样的永久连接不是很容易。在服务器或客户库中还没有一个合适的概念来讨论它。 SignalR是为ASP.NET而设的一个异步信号库。我们团队正在研究这个项目,希望能创建实时的多用户网络应用。 这不就是Socket.IO或者nowjs么? Socket.IO是一个客户端JavaScript库,能与node.js进行交流。Nowjs是能让你从服务器端调用客户的类库。这些和Signalr都很相似而且相关,只是同一个概念中的不同方面。这些JavaScript库都希望在服务器端有特定的东西和协定,这样就有可能让服务器端的显示如同客户希望看到的那样。 SignalR是一个完全基于客户及服务器端解决方案,它是以JS作为客户端和ASP.NET作为服务端来创建这类的应用。你可以去GitHub获取。 我能用12行代码创建一个聊天应用吗? 我想说 “在代码的世界中,简洁明了永远不是神话。” 换句话说,我希望我能这么说,当然可以! 1: Chat.DoItBaby() 但是那可能是一个谎言,下面是SignalR中的一个真实的聊天应用程序例子: 客户: 1: var chat = $.connection.chat; 2: chat.name = prompt(“What’s your name?”, “”); 3:  4: chat.receive = function(name, message){ 5: $(“#messages”).append(“”+name+”:…

1