顯示具有 MSSQL 標籤的文章。 顯示所有文章
顯示具有 MSSQL 標籤的文章。 顯示所有文章

2010/11/17

[PHP]解決網站被 SQL injection 攻擊

其實這個安全性的問題,在目前台灣網站都存在這樣的問題,大家平常用 $_POST,$_GET 用得很順利,但是沒有想過帳號密碼被 SQL injection 破解,當網站被破解了,基本上你損失就是相當嚴重,網路上也有很多攻擊方式,不過這方法是最常被拿出來講的,我自己有一套解決方式,除了比較重要的地方,就是輸入帳號密碼的地方要加強防護之外,加上數字驗證碼,還要 check 帳號的特性,我底下是我驗證帳號密碼機制

if($user_name == '' || $user_passwd == ''){
ErrMsg("帳號或密碼不得空白");
}
if (!preg_match('/^\w+$/', $user_name)){
ErrMsg("請勿攻擊本站台");
}


上面可以解決帳號只能輸入數字加上英文,然後底下在過濾很多特殊字元加上 addslashes 或者是用 mysql_escape_string()

if( !get_magic_quotes_gpc() )
{
if( is_array($_GET) )
{
while( list($k, $v) = each($_GET) )
{
if( is_array($_GET[$k]) )
{
while( list($k2, $v2) = each($_GET[$k]) )
{
$_GET[$k][$k2] = addslashes($v2);
}
@reset($_GET[$k]);
}
else
{
$_GET[$k] = addslashes($v);
}
}
@reset($_GET);
}

if( is_array($_POST) )
{
while( list($k, $v) = each($_POST) )
{
if( is_array($_POST[$k]) )
{
while( list($k2, $v2) = each($_POST[$k]) )
{
$_POST[$k][$k2] = addslashes($v2);
}
@reset($_POST[$k]);
}
else
{
$_POST[$k] = addslashes($v);
}
}
@reset($_POST);
}

if( is_array($_COOKIE) )
{
while( list($k, $v) = each($_COOKIE) )
{
if( is_array($_COOKIE[$k]) )
{
while( list($k2, $v2) = each($_COOKIE[$k]) )
{
$_COOKIE[$k][$k2] = addslashes($v2);
}
@reset($_COOKIE[$k]);
}
else
{
$_COOKIE[$k] = addslashes($v);
}
}
@reset($_COOKIE);
}
}

上面那段,可以避免利用特殊字元做 SQL injection 攻擊,這部份程式碼是我去 trace PHPBB2 code 裡面寫的^^。

文章來源:[PHP]解決網站被 SQL injection 攻擊

2010/08/10

SQL Server 2008 安裝問題

重新安裝 SQL Server
網路上的評價,SQL Server 2008 比 SQL Server 2005 來得穩定、快速、且省空間,因為實驗室沒有太特殊的需要,我猜想 Express 版本應該就足以應付,所以決定移除原先安裝的 2005,改用 2008。

本來是打算使用「升級」的方式來做程式安裝,因為之前在自己的電腦移除過 SQL Server,不知道是甚麼檔案沒殺乾淨,之後不論甚麼版本的 SQL Server 都無法安裝。不過,機器上的 2005 是 Enterprise 版本,而要安裝的 2008 是 Express 版本,系統並不允許這樣的升級方式1,所以還是只能先移除再安裝。

SQL Server 的移除很笨,使用者必須至「控制台」的「新增或移除程式」手動移除。再安裝,沒有意外地,相同的問題又再發生,安裝一直失敗。

Overall summary:
Final result: SQL Server 安裝失敗。若要繼續,請調查失敗的原因、更正問題、解除安裝 SQL Server,然後重新執行 SQL Server 安裝程式。
Exit code (Decimal): -2068643839
Exit facility code: 1203
Exit error code: 1
Exit message: SQL Server 安裝失敗。若要繼續,請調查失敗的原因、更正問題、解除安裝 SQL Server,然後重新執行 SQL Server 安裝程式。
Start time: 2008-12-03 15:40:32
End time: 2008-12-03 15:42:49
Requested action: Install
Log with failure: C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\20081203_153912\Msxml6_Cpu32_1.log
Exception help link: http://go.microsoft.com/fwlink?LinkId=20476&ProdName=Microsoft+SQL+Server&EvtSrc=setup.rll&EvtID=50000&ProdVer=10.0.1600.22

查詢 log,找到錯誤訊息如下:

MSI (s) (AC:04) [15:42:41:687]: Note: 1: 1708
MSI (s) (AC:04) [15:42:41:687]: 產品: MSXML 6.0 Parser (KB933579) — 安裝失敗。
MSI (s) (AC:04) [15:42:41:687]: Windows Installer 已安裝該產品。產品名稱: MSXML 6.0 Parser (KB933579)。產品版本: 6.10.1200.0。產品語言: 1028。安裝成功或錯誤狀態: 1603。

MSI (s) (AC:04) [15:42:41:687]: Cleaning up uninstalled install packages, if any exist
MSI (s) (AC:04) [15:42:41:687]: MainEngineThread is returning 1603
MSI (s) (AC:BC) [15:42:41:796]: No System Restore sequence number for this installation.
=== 停止記錄時間: 2008/12/3 15:42:41 ===
MSI (s) (AC:BC) [15:42:41:796]: User policy value 'DisableRollback' is 0
MSI (s) (AC:BC) [15:42:41:796]: Machine policy value 'DisableRollback' is 0
MSI (s) (AC:BC) [15:42:41:796]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (s) (AC:BC) [15:42:41:796]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (AC:BC) [15:42:41:796]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2
MSI (s) (AC:BC) [15:42:41:796]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\InProgress 3: 2
MSI (s) (AC:BC) [15:42:41:796]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\InProgress 3: 2
MSI (s) (AC:BC) [15:42:41:796]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1
MSI (s) (AC:BC) [15:42:41:796]: Restoring environment variables
MSI (c) (4C:EC) [15:42:41:796]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied. Counter after decrement: -1
MSI (c) (4C:EC) [15:42:41:796]: MainEngineThread is returning 1603
=== Verbose logging stopped: 2008/12/3 15:42:41 ===

回到「新增或移除程式」視窗,發現應用程是列表中有一項「MSXML6 SP2」,移除2以後就可以正確安裝。

Footnotes
1. 若要查詢可行的升級方案,請至 MSDN
2. 重新安裝後記得做更新,將 MSXML6 SP2 再裝回來

2010/06/15

SQL Inject 除去惡意碼


Declare @T Varchar(255),@C Varchar(255)
Declare Table_Cursor
Cursor For Select A.Name,B.Name From Sysobjects A,Syscolumns B
Where A.Id=B.Id And A.Xtype='u' And
(B.Xtype=99 Or B.Xtype=35 Or B.Xtype=231 Or B.Xtype=167)
Open Table_Cursor Fetch Next From Table_Cursor Into @T,@C
While(@@Fetch_Status=0)
Begin
exec('update ['+@T+'] Set ['+@C+']=Replace(['+@C+'],''骯髒的碼'','''')')
Fetch Next From Table_Cursor Into @T,@C
End Close Table_Cursor Deallocate Table_Cursor


參考文章:
http://www.dotblogs.com.tw/dotjum/archive/2009/08/02/9808.aspx