Webサイトの注入と防犯の一般的な方法


最近多くの人のウェブサイトがjsに注入され、iframeなどに注入されているのを見ました.とても多いです.私はかつて1つの比較的に大きいウェブサイトを引き継いだことがあって、人に侵入されて、私に残局を片付けるように要求しました.1.まず、サーバーの構成を確認し、サーバーのセキュリティを再構成します.参考にしてください.http://hi.baidu.com/zzxap/blog/item/18180000ff921516738b6564.html 2.次に、麦コーヒーでポリシーをカスタマイズすると、サイトのプログラムに脆弱性があっても、ファイルにコードを書き込むのは難しい.カスタムポリシーを参照してください.このポリシーがあれば、どんなに腐ったプログラムでも、私のファイルに書き込めません.http://hi.baidu.com/zzxap/blog/item/efe093a7e0f2c190d04358ef.html 3.注入されたJSコードは、ネットワークスーパー巡査で削除できます.参照http://hi.baidu.com/anlish/blog/item/ba45bb18eac77e0534fa4134.html 4.データベースに注入されたコードを一括削除する方法データベース・クエリー・アナライザでこのコードを実行します.
SQL code
DECLARE
@fieldtype
sysname
SET
@fieldtype
を選択します.
'
varchar
'
--
削除処理
DECLARE
hCForEach
CURSOR
GLOOBAL
FOR
SELECT
N
'
update
'

QUOTENAME
(o.name)   

N
'
set
'

QUOTENAME
(c.name)

N
'
= replace(
'

QUOTENAME
(c.name)

'
,
''

''
,
''''
)
'
FROM
sysobjects o,syscolumns c,systypes t
WHERE
o.id
を選択します.
c.id   
AND
OBJECTPROPERTY
(o.id,N
'
IsUserTable
'
)
を選択します.
1
   
AND
c.xusertype
を選択します.
t.xusertype   
AND
t.name
を選択します.
@fieldtype
EXEC
sp_MSforeach_Worker
@command1
を選択します.
N
'
?
'
5.があれば挿入しないトリガを作成し、パフォーマンスに影響を与える
SQL code

      
      
      
      
create trigger tr_table_insertupdate on tablename for insert , update as if exists ( select 1 from inserted where data like ' %</script>% ' ) begin RAISERROR ( ' ' , 16 , 1 ); ROLLBACK TRANSACTION end go
6.最も重要なのはやはりプログラムの書き方で、パラメータ化SQLあるいはストレージの過程で例えば
C萼code

   
   
   
   
protected void cmdok_Click( object sender, EventArgs e) { // StringBuilder sql = new StringBuilder( " insert into m_phone ( pid,PhoneName,num,price,phonetype,onSellTime,color,weight,Video,Camera,phoneSize,phoneSystem,Memorysize,PhoneDesc,Standbytime,ScreenSize,Frequency,InputMethod,Soundrecord,gps,fm,mp3,email,Infrared,game,clock,Calendar,Calculator,Bluetooth) " ); sql.Append( " values (@pid,@TextPhoneName,@Textnum,@Textprice,@Dropphonetype2,@TextonSellTime,@Textcolor,@Textweight " ); ................. SqlParameter[] paras = { new SqlParameter( " @pid " , SqlDbType.Int, 4 ) , new SqlParameter( " @TextPhoneName " , SqlDbType.NVarChar, 50 ) , new SqlParameter( " @Textnum " , SqlDbType.Int, 4 ) , new SqlParameter( " @Textprice " , SqlDbType.Int, 4 ) , new SqlParameter( " @Dropphonetype2 " , SqlDbType.VarChar, 20 ) , new SqlParameter( " @TextonSellTime " , SqlDbType.DateTime, 8 ) , new SqlParameter( " @Textcolor " , SqlDbType.VarChar, 20 ) , new SqlParameter( " @Textweight " , SqlDbType.NVarChar, 50 ) , ........... }; string [] stra = {Dropphonetype.SelectedValue,TextPhoneName.Text , Textnum.Text, Textprice.Text, Dropphonetype2.SelectedValue, TextonSellTime.Text, Textcolor.Text, Textweight.Text, .............}; int a = stra.Length; int j; for ( j = 0 ; j < a; j ++ ) { paras[j].Value = stra[j]; } int strpid = 0 ; string sqla = sql.ToString(); try { SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, paras); // strpid = Convert.ToInt32(SqlHelper.ExcuteSclare(sqla, CommandType.Text, paras)); // id } catch (SqlException ex) { cmdreturn.Text = ex.Message.ToString(); } cmdreturn.Text = strpid.ToString();

   
   
   
   
7. URL
C# code

        
        
        
        
string szTmp = " safdsfdsafdsfytrsd " ; szTmp = Server.UrlEncode(szTmp); STRING STRA = Server.UrlDecode(request.querystring(szTmp));
8. するパラメータを で み、SQLに れる    たとえばstring stra=aa.replace('''',')  SQLをパラメトリックに すると、 を せずに できます.  パラメータのタイプを し、 をフィルタリングすると、99.9%が の に しないようにすることができます.ネット で のように われているフィルタアップupdate insert  などのキーワードのプログラムはあまり に たない.  upupdatedate updateをフィルタリングするかupdateをフィルタリングするかは なトラブルになります
    http://topic.csdn.net/u/20090729/14/26381958-0D6E-4B90-BC90-D275E9621F93.html