网站被黑原因,sql注入式攻击,网站挂马防范

1、网站被黑的原因 此次我们网站遭到的是sql注入攻击,具体攻击目标是数据库中存放2009年1月份数据表,黑客修改了这张表的一个字段的信息,导致了我们网站被嵌入带有威胁的js代码。 2、解决办法 到目前为止,我们已经把整个数据库的所有记录信息都进行了排查、消除了所有带有危害的数据,我们也已经把所有容易受到攻击的端口关闭(ftp的21端口)、并重新设置数据库的用户名和密码;另外,开发人员和系统人员都在努力寻找和修补在Web服务器上可能存在的sql注入漏洞。 3、未来防范策略 (1)、严格限制对sql server数据库的访问权限; (2)、对网站的sql语句进行全面排查,确保所有对数据库请求操作都进行字符串过滤; (3)、关闭除了80和443以外的其他所有端口; (4)、定期对数据库最可能受攻击的数据进行安全检查。

May 21, 2009

设计模式:单件模式C#实现,源代码

单件模式属于创建型模式,创造性模式主要是关注于如何以及何时创建对象。Singleton 模式可以保证一个类有且只有一个实例,并提供一个访问它的全局访问点。在程序设计过程中,有很多情况需要确保一个类只能有一个实例。 namespace Singleton.Design.Pattern { class Program { static void Main(string[] args) { //Singleton e = new Singleton(); 这是错误的,因为已经设定为保护类型了 Singleton instance = Singleton.Instance(); instance.Show(); Console.ReadKey(); } } public class Singleton { private static Singleton instance; protected Singleton() { } public static Singleton Instance() { if (instance == null) { instance = new Singleton(); } return instance; } public void Show() { Console.WriteLine("Singleton is Show now!"); } } }

May 21, 2009

设计模式:抽象工厂模式C#实现,源代码

前一篇文章介绍了简单工厂和工厂方法模式,这次讨论抽象工厂模式。 1、抽象工厂模式定义 抽象工厂模式也叫Abstract Factory模式,是由GoF提出的23种设计模式中的一种,也是对象创建型模式之一。它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它提供一个接口,以创建多个相关联的对象,而无需具体指定其具体的类。形象地说,它是一个工厂,能够生产众多产品。当用户需要某种产品的时候,不需要去关心这个产品的具体实现,而只需要指定产品的名称,抽象工厂就能够按你的要求进行生产。这里所指的产品,在C#中我们代表的是一个实例的类。 2、在什么情况下使用抽象工厂模式 在面向对象的程序设计中,我们经常会定义许多类,并通过new对其进行实例化。一旦类对象较多,且在实例化的时候,要做的初始化工作比较复杂的时候,我们就可以通过抽象工厂来管理。根据对象的性质和内容分别抽象成类,同时定义接口和接口方法。一旦定义了抽象工厂,实例类的工作就交给工厂,使用者只需要告诉工厂,你实例化的对象是什么就行了。 3、抽象工厂模式实现原理 抽象工厂模式(Abstract Factory)强调的是对象组合机制,由在父工厂内定义不同的“子工厂”对象来负责不同的目标对象的创建。请注意下面要点: (1)、 抽象工厂模式中,产品(目标对象)的使用者可能需要使用具体的子工厂来生成该产品; (2)、抽象工厂模式采用传参数的形式直接在父工厂内决定该产品对象应该由哪一个子工厂生产。即Abstract Factory模式中,跟客户打交道的只有抽象工厂与抽象产品,客户不需要知道产品由哪个工厂生产,也不需要知道被生产的是哪一种具体的产品; (3)、Factory Method模式中,省城的对象产品只限定于某一类产品;Abstract Factory模式则可以提供多个生产接口生成多类产品; (4) 、Abstract Factory模式Factory Method模式的更高层次的抽象,也更最具一般性。可以把Factory Method模式看作是Abstract Factory模式的一种特殊情况。 4、C#实现代码 using System; using System.Collections.Generic; using System.Text; namespace AbstractFactory.Design.Pattern { class Program { static void Main(string[] args) { IAbstratFactory factory1 = new ConcreteFactory1(); IAbstratFactory factory2 = new ConcreteFactory2(); Evironment e1 = new Evironment(factory1); Evironment e2 = new Evironment(factory2); e1.Show(); e2.Show(); e1.Run(); e2.Run(); Console.ReadKey(); } } //抽象产品 public interface IAbstractProduceA { void MakeProduce(); } public interface IAbstractProduceB { void InterTract(IAbstractProduceA a); } //具体产品 public class ProduceA1:IAbstractProduceA { public void MakeProduce() { Console.WriteLine(“ProduceA1 is Created now!”); } } public class ProduceB1 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this + " contact with " + a); } } public class ProduceA2 : IAbstractProduceA { public void MakeProduce() { Console.WriteLine(“ProduceA2 is Created now!”); } } public class ProduceB2 : IAbstractProduceB { public void InterTract(IAbstractProduceA a) { Console.WriteLine(this+" contact with “+a); } } //抽象工厂 public interface IAbstratFactory { IAbstractProduceA CreateProduceA(); IAbstractProduceB CreateProduceB(); } //具体工厂 public class ConcreteFactory1 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA1(); } public IAbstractProduceB CreateProduceB() { return new ProduceB1(); } } public class ConcreteFactory2 : IAbstratFactory { public IAbstractProduceA CreateProduceA() { return new ProduceA2(); } public IAbstractProduceB CreateProduceB() { return new ProduceB2(); } } //客户端 public class Evironment { private IAbstractProduceA abstractProdueA; private IAbstractProduceB abstractProdueB; public Evironment(IAbstratFactory factory) { abstractProdueA = factory.CreateProduceA(); abstractProdueB = factory.CreateProduceB(); } public void Show() { abstractProdueA.MakeProduce(); } public void Run() { abstractProdueB.InterTract(abstractProdueA); } }

May 21, 2009

设计模式:简单工厂和工厂方法的C#实现

设计模式中工厂方法包括了:简单工厂,工厂方法和抽象工厂,下面给出简单工厂和工厂方法的C#实现,你可以直接拷贝运行。 namespace Factory.Design.Pattern { class Program { static void Main(string[] args) { //设计模式之简单工厂 //LightSimpleFactory lsf = new LightSimpleFactory(); //Light lsb= lsf.Create("Blue"); //Light lsr = lsf.Create("Red"); //lsb.TurnOn(); //lsr.TurnOn(); //设计模式之工厂方法 CreatorMethod cb = new BlueCreator(); CreatorMethod cr = new RedCreator(); Light lb = cb.factory(); Light lr = cr.factory(); lb.TurnOn(); lr.TurnOn(); Console.ReadKey(); } } public abstract class Light { public abstract void TurnOn(); } public class BlueLight : Light { public override void TurnOn() { Console.WriteLine("Blue Light is turn on!"); } } public class RedLight : Light { public override void TurnOn() { Console.WriteLine("Red Light is turn on!"); } } #region 简单工厂 public class LightSimpleFactory { public Light Create(string LightType) { switch (LightType) { case "Blue": { return new BlueLight(); } case "Red": { return new RedLight(); } default: { return null; } } } } #endregion #region 工厂方法 public abstract class CreatorMethod { public abstract Light factory(); } public class BlueCreator : CreatorMethod { public override Light factory() { return new BlueLight(); } } public class RedCreator : CreatorMethod { public override Light factory() { return new RedLight(); } } #endregion }

May 21, 2009

面向对象思想研究心得体会

封装、继承、多态,这三个是面向对象最重要的概念,抽象则是灵魂与核心。但是真正的面向对象决不是通过简单的继承、通过实现简单的多态来实现的,面向对象的核心在于它的几个指导原则(单一职责原则,接口隔离原则,依赖倒置原则,Liskov原则,开发封闭原则)下设计出相互作用的类。 面向对象还有两个特别的名词:类,对象。类与类之间的相关联系(聚合、泛化、依赖、关联),对象与对象之间的转换关系,这两者是真正考验一个人面向对象设计能力的指标。 在一个面向对象系统中,大量的类在一起,它们不可能都没有相互关系,如果这样的话就无法完成优秀的面向对象设计架构。在C#中,对象与之间的关系,主要在于处理好父类对象和之类对象之间的引用关系。 1、单一职责原则:一个类,最好只做一件事,只有一个引起它变化的原因; 2、开放封闭原则:软件实体应该是可扩展,而不可修改的。也就是说扩展是开放的,修改是封闭的; 3、依赖倒置原则:依赖于抽象,而不是依赖与具体; 4、接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口; 5、Liskov原则:子类必须能够替换其基类。 以上这五个原则在面向对象设计中非常关键,只有灵活地运用了才可以真正地掌握好面向对象思想。

May 21, 2009