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
C萼code
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