一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

网站防止CC攻击的方法

CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。 CC攻击的攻击技术含量低,利用工具和一些IP代理,一个初、中级的电脑水平的用户就能够实施攻击。不过,如果了解了CC攻击的原理,那就不难针对CC攻击实施一些有效的防范措施。 通常防止CC攻击的方法有几种,一个是通过防火墙,另外一些网络公司也提供了一些防火墙服务,例如XX网站卫士和XX宝,还有一种方法是自己写程序预防,昨天网站遇到CC攻击,这也让我尝试了一下各种防止CC攻击方法的有效性。 一开始我想使用某某网站卫士来预防攻击,从界面上看,似乎是防止了大量的CC攻击,但登录网站后发现,流量依旧异常,攻击还是依旧,看起来这个网站卫士的效果并没有达到。 从原理上看,基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。但如果IP的数量足够大,使得单个IP的连接数较少,那么防火墙未必能阻止CC攻击。 不仅如此,我还发现,启用了某某网站卫士之后,反而更容易被CC攻击,因为这个网站卫士并不能过滤掉CC攻击,攻击的IP经过其加速后,更换成为这个网站卫士的IP,在网站服务器端显示的IP都是相同的,导致服务器端无法过滤这些IP。 实际上,不使用网站卫士类的服务,直接通过分析网站日志,还是很容易分辨出哪个IP是CC攻击的,因为CC攻击毕竟是通过程序来抓取网页,与普通浏览者 的特性区别还是很大的,例如普通浏览者访问一个网页,必定会连续抓取网页的HTML文件、CSS文件、JS文件和图片等一系列相关文件,而CC攻击者仅仅 只会抓取一个URL地址的文件,不会抓取其他类型的文件,其User Agent也大部分和普通浏览者不同,这就可以在服务器上很容易分辨出哪些访问者是CC攻击了,既然可以判断出攻击者的IP,那么预防措施就很简单,只需 要批量将这些IP屏蔽,即可达到防范CC攻击的目的。 最终,我花了半个小时写了一段小程序,运行之后自动屏蔽了数百个IP,网站才算正常,从而证明,防火墙对于CC攻击的防御并不有效,最有效的方法还是在服务器端通过程序自动屏蔽来预防。 看来CC攻击的门槛还真低啊,搞个几百个代理或者肉鸡就能攻击别人了,其成本非常低,但效果比较明显,如果攻击者流量巨大的话,通过耗费带宽资源的方式 都可以进行攻击。但是,CC攻击也有明显的技术缺陷,就是攻击者的IP并不是海量的,通常就是几百数千的级别,并且是真实访问了网站页面,这就使得网站可 以通过程序过滤的方式,轻松获取到这些攻击者IP,批量进行屏蔽,那么这种CC攻击就会得到预防。 对于站长来说,通过程序来过滤CC攻击门槛较高,要有一定的编程技术,因此还是建议使用第三方网站提供的预防CC的服务,目前主要的网站有:360网站卫士、百度加速乐、安全宝等。

龙生   11 Sep 2014
View Details

ASP.NET Application_Error错误日志写入

一个web项目开发已完成,测试也通过,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,利用里面的Application_Error函数。 Global.asax代码: <%@ Application Language="C#" %> <script runat="server">     void Application_Start(object sender, EventArgs e)      {         // 在应用程序启动时运行的代码     }          void Application_End(object sender, EventArgs e)      {         //  在应用程序关闭时运行的代码     }              void Application_Error(object sender, EventArgs e)      {          // 在出现未处理的错误时运行的代码        // 在出现未处理的错误时运行的代码                      Exception objErr = Server.GetLastError().GetBaseException();             string error = string.Empty;             string errortime = string.Empty;             string erroraddr = string.Empty;             string errorinfo = string.Empty;             string errorsource = string.Empty;             string errortrace = string.Empty;             error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";             errortime = "发生时间:" + System.DateTime.Now.ToString();             error += "发生异常页: " + Request.Url.ToString() + "<br>";             erroraddr = […]

龙生   10 Sep 2014
View Details

Windows防火墙开启ping

今天被这么一个问题困扰:当我通过本机ping另一台在同一局域网内(即在同一网段)的计算机时,发现,如果防火墙开启的话,无论如何也ping不通。一旦关闭防火墙就可以ping通了。这是为什么呢?究竟该怎么设置呢?    原因是这样的,现在的计算机系统,出于安全考虑,在默认情况下是不允许外部主机对其进行ping测试的。但在一个安全的局域网环境中,Ping测试又是管理员进行网络测试所必须的。如何更改设置呢?XP系统和WIN7系统有所不同:   Windows XP:     Windows防火墙 --> 高级 --> ICMP --> 设置 --> 把“允许传入回显请求”前打上勾 --> 确定 --> 大功告成。    Windows 7:     Windows防火墙 --> 高级设置 --> 入站规则 --> 在列表里找到“文件和打印机共享(回显请求 – ICMPv4-In)” --> 右击选择启用规则,并在其属性里设置为‘允许连接’-->  确定 --> 大功告成。 from:http://blog.csdn.net/zltianhen/article/details/7802191

龙生   10 Sep 2014
View Details

windows server 2012 r2上网慢解决方案,2008无法intel-windows server 2012 r2 slower internet solutions

最近家里和办公室新装 Windows Server 2012 R2 数据中心版操作系统,仍然非常脑残的两个设计:脑残的开始菜单、脑残的Win+Space切换输入法。除此之外还可以接受,当然我已将脑残的开始通过Start8解决掉了,另外说个关于Win2012R2网速痛苦的经历。 最近发现不管是家里还是办公室,打开有些网站都非常的慢,准确说是响应非常的慢,输入网址驾车后要等甚至8秒才得到响应打开网页,并且还不是所有网 站都这样,部分(包括手里维护的几个网站),以为是服务器问题于是将网站服务器重装了系统,最后发现我真二,没解决问题后才发现是我电脑的问题,远程了其 它两台不是2012的系统打开流畅的很,百度一下才发现问题出在Windows上。我不是这方面的专家只好转原文如下,灰常感谢网友的文章。 Windows Server 2012/2012 R2 上网非常慢的解决办法(转载): 装了个windows server 2012玩玩,发现效果真心不错,尤其是对负载的处理上,很少听到风扇的呼呼声了。但发现一个问题,在办公室上网,打开网页,总是要等2-3秒才显示出页 面内容,但回家后就没有这种问题了。折腾一整天,各种修复,各种改,防火墙、驱动、组策略、MTU、TTL,各种不好使。 本想装一个Wireshark抓下包分析一下,但发现winpcap装不上,坑爹。我就在想,难道服务器系统就这原因?网上没找到任何解决办法,连提出这个问题的人都没看到。 还是得抓包分析,安装了个Microsoft Network Manager,微软自家的抓包工具,终于好使了。分析TCP数据包,发现在单位,每打开一个网页,都会先向目标发送好几个TCP ECN(显式拥塞通知)数据包,然后等到2-3秒后,再与目标3次握手建立TCP连接;但是在家却没有发送TCP ECN数据包。 原来Windows server 2012默认打开了ECN功能(貌似从Windows server 2008之后都默认打开),个人操作系统却没有打开,而办公室网络的确拥塞不小,造成了这种效果。好了,执行“netsh int tcp set global ecn=disable”命令后,果断OK了。 很明确了,只需要CMD执行以下命令,网速马上恢复,我和小伙伴们都惊呆了: netsh int tcp set global ecn=disable 果然奏效,开心…灰常感谢:(http://blog.sina.com.cn/s/blog_475d6daf0101bxtn.html)http://blog.sina.com.cn/s/blog_475d6daf0101bxtn.html 关于这类命令及原理我也不是很清楚也不去深究了,以下还有类似网络流行的提高网速方法: 接收方缩放状态 : enabled 烟囱卸载状态 : automatic NetDMA 状态 : enabled 直接缓存访问(DCA) : enabled 接收窗口自动调谐级别 : normal 附加拥塞控制提供程序 : none ECN 功能 : disabled RFC 1323 时间戳 : enable 逐项输入命令: 接收方缩放状态:netsh int tcp set global rss=enabled 烟囱卸载状态 :netsh int tcp set global chimney=automatic NetDMA 状态:netsh int […]

龙生   10 Sep 2014
View Details

编程的真实样子

当我跟人说我是一个Web程序员,他们会认为我是个天才。当我告诉他们我工作的公司是编写火狐浏览器的,他们认为我跟上帝一样伟大。我可以想象,其 他的程序员也会跟我一样受到这样的待遇。这些话我并不是要跟自己说,或说给我们圈内人听,我说这些是因为很多圈外人对我们的编程没有任何概念。 甚至在业内,一些程序员对另外一些程序员也是高山仰止。在我的眼中,Mozilla公司里很多其他程序员简直就是传奇,而事实上,很多时候,他们真是。就是这个原因,我们程序员中很多人只才会患上骗子综合征,就是这个原因,我们才害怕加入OSS项目,害怕在开发大会上和明星程序员们站在一起。 下面这个漫画展示了人们眼中的编程生活和实际编程生活的区别: 我们经常会在编程时犯愚蠢的错误。我们整天盯着屏幕看,寻找一行让我们的应用无法启动的代码。我们诅咒浏览器为什么不能正常显示页面,却发现是一行明显的错误造成的。每个程序员都有这种时刻,冥思苦索是每天的例行活动。 这是程序员的真实生活。 英文原文标题是:The Truth About Programming Perception。 稿源:程序师网 FROM:http://www.oschina.net/news/54978/truth-programming-perception

龙生   04 Sep 2014
View Details

php数学运算

一.数值数据类型 数字或数值数据在PHP中一般就两种double和int。 PHP是一种松散类型的脚本语言,要注意类型转换的方式。  .代码如下: <?php $a = '5'; //数字的字符串也是数字,参与数学运算当数字处理 echo is_numeric ( $a ); //1 echo '<br/>'; echo 7 + $a; //12 echo '<br/>'; echo '7' + $a; //12 echo '<br/>'; //用.连接后就按字符串处理 echo '7' . $a; //75 ?> 二.随机数 Rand()函数是libc中定义的一个随机函数的简单包装器。 Mt_rand()函数是一个很好的代替实现。  .代码如下: <?php $a = rand(0,10); echo $a; echo '<br/>'; echo getrandmax(); echo '<br/>'; $b = mt_rand(0,10); echo $b; echo '<br/>'; echo mt_getrandmax(); echo '<br/>'; ?> output 1 32767 6 2147483647 三.格式化数据  .代码如下: <?php $a = 12345.6789; //用于设置保留多少位小数点 echo number_format($a,2); echo '<br/>'; //也可以改变默认小数点的符号表示和千分位的表示符号 echo number_format($a,2,’#',’*') ?> Output 12,345.68 12*345#68 四.数学函数  函数 功能 Abs() 取绝对值 Floor() 舍去法取整 Ceil() 进一法取整 Round() 四舍五入 […]

龙生   04 Sep 2014
View Details

你不知道的Eclipse用法:全局搜索和更替

Eclipse中全局搜索和更替    Eclipse全局搜索步骤    使用快捷键“ctrl+H”打开文件搜索对话框,选择“File Search”标签,在Containing text中输入你需要搜索的字符串,在Scope中,选择你要搜索的范围,点击Search。    在Search视图中,会列出搜索得到的结果,点击打开属性结构。双击搜索结构,就会显示源代码中的搜索结果。    Eclipse全局替换步骤    在全局搜索到目标字符串后,在Search视图中,选择搜索到目标字符串,右键->Replace All,弹出对话框。在With:当中,填写需要更改的字符串。点击Replace按钮。      from:http://blog.csdn.net/p106786860/article/details/9162537

龙生   04 Sep 2014
View Details

Eclipse中PHP开发插件

http://download.eclipse.org/tools/pdt/updates/latest/

龙生   03 Sep 2014
View Details

PHP中获取当前页面的完整URL

#测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br>"; #localhost //获取网页地址 echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php //获取网址参数 echo $_SERVER["QUERY_STRING"]."<br>"; #id=5 //获取用户代理 echo $_SERVER['HTTP_REFERER']."<br>"; //获取完整的url echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; #http://localhost/blog/testurl.php?id=5 //包含端口号的完整url echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; #http://localhost:80/blog/testurl.php?id=5 //只取路径 $url=’http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]; echo dirname($url); #http://localhost/blog FROM:http://www.cnblogs.com/A-Song/archive/2011/12/14/2288215.html

龙生   02 Sep 2014
View Details

使用Log4net记录日志

首先说说为什么要进行日志记录。在一个完整的程序系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。 Log4net是一个很著名的开源的日志记录组件。官方网址为:http://logging.apache.org/log4net/ ,使用Log4net能够很简单的为我们的程序添加日志记录功能。下面我们先通过一个网站例子来说明如何在.net中使用log4net。 创建日志记录步骤 第一步, 当然是添加log4net.dll的引用啦,我这里提供一个log4net的dll文件,懒得去官网下的可以到这里下http://www.vdisk.cn/down/index/7509396A7366 第二步, 在AssemblyInfo.cs文件中添加下面一句话: 1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)] 这句话的意思是log4net会自动寻找配置文件App.config或Web.config从而获得并加载其中的配置信息。如果想log4net随时监视配置文件以便重新加载的话就要这样写按照上面一样写(winform程序ConfigFile为App.config)。 第三步, 配置Web.config。

上面这段配置取自周公,配置的说明上面已经注释的比较详细了。 第四步, 在程序中记录信息。我们在项目下Default.aspx的Page_Load方法加入如下代码:

然后运行项目,可以发现在c:\log4netfile.txt中已经记录了一条日志信息:

通过上面这几步我想您已经能够为程序创建一些简单日志记录功能了。下面我们再来详细说说log4net其他的一些使用方法与特点。 log4net详细说明 这里我通过问答的形式来说明log4net的一些应用。 1.log4net总共有几种记录方式,每种方式该如何配置与使用? Log4net目前支持的输出方式包括:

  可以看到目前支持的方式还是很多的,我这里调几个认为常用的做个例子。 1.文件的方式我们上面已经讲过了,这里不再做例子了。 2.数据库方式: 首先,添加数据库记录appender

然后建立c:log4net.mdb 数据库,并在代码中启用数据库记录方式:

这样日志就被记录到数据库中了。 2.log4net如何过滤我想要的日志信息,比如一个日志中只记录程序错误日志? 这个需求可以通过配置filter来实现。具体操作如下: 全局方式: 这种方式会将级别应用于所有的日志输入方式。具体操作为在root节点下添加:

这样对于所有的日志记录方式,所有地域ERROR级别的都不会被记录了。 单独配置级别方式:       该方式不会影响其他的日志输入方式。方法如下为,在具体的appender下添加filter:

这种方式可以配置记录级别的方位,如果只需要记录一种,则最大和最小设置一样就行了。 3.你上面的日志输出格式我不喜欢,如何在log4net中配置我想要的日志输出格式? log4net的输入格式定义在每个appender的layout中。具体的有以下内置可选项: %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n(new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c(class):当前日志对象的名称,例如: %f(file):输出语句所在的文件名。 %l(line):输出语句所在的行号。 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。 通过这些东西,你可以任意组合你喜欢的输出格式内容。   4.有没有方式控制程序自动按日期记录日志信息,即每天的日志都在不同的日志文件中? 其实这种方式对应于一种特定的记录方式:RollingFileAppender。这种方式也是基于文件记录的,不过他提供更加灵活的日志记录方式。具体说来他可以按日志文件的大小或者日志记录的时间进行自动变换日志文件。 按每天不同的日期进行记录分类:

按照日志文件的大小进行变换,通过这种方式可以有效降低日志文件体积膨胀的问题:

最后从网上找了一段写日志的原则,感觉还是很好的: 【写日志的原则】 Ⅰ.在catch后,把异常写入日志. Ⅱ.在调用第三方控件的开始和结束处. Ⅲ.在连接数据库的开始结束处. Ⅳ.除非必要,不要在循环体中加入日志,否则一旦出问题可能导致日志暴增. Ⅴ.在自己认为很重要的逻辑处写入日志.   如果要将log方法写在类库里面,那么可以参考这篇文章http://hi.baidu.com/sjbh/blog/item/10cda8d689fb0c3807088b87.html from:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html

龙生   02 Sep 2014
View Details
1 220 221 222 282