Saturday, May 23, 2009

mySQL ไม่ start

วันนี้ได้จะทดลองแก้ไขเว็บซะหน่อย ปรากฎว่าไม่สามารถติดต่อกับ mySQL ได้เลย จึงตัดสินใจ uninstall
และ install ใหม่แต่ก็ไม่สำเร็จเนื่องจากตอน install ส่วนสุดท้ายไม่สามารถ start service ได้

จึงทำการเข้าไปที่ ส่วน service ของ window แล้วจึง start service เลยก็ทำให้ใช้ได้ปรกติ แต่ไม่รู้ว่าต้องเปิดบ่อยๆอย่างนี้หรือเปล่าเนี่ยสิ

Saturday, May 16, 2009

SQL Injection

หมายถึง แฮกเกอร์สามารถที่จะแทรก Malicious Code หรือ คำสั่งที่แฮกเกอร์ใช้ในการเจาะระบบส่งผ่าน Web Application ไปยังระบบภายนอกที่เราเชื่อมต่ออยู่ เช่น ระบบฐานข้อมูล SQL โดยวิธี SQL Injection หรือ เรียก External Program ผ่าน shell command ของระบบปฎิบัติการ เป็นต้น

ส่วนใหญ่แล้วแฮกเกอร์จะใช้วิธีนี้ในช่วงการทำ Authentication หรือการ Login เข้าระบบผ่านทาง Web Application เช่น Web Site บางแห่งชอบใช้ "/admin" ในการเข้าสู่หน้า Admin ของ ระบบ ซึ่งเป็นช่องโหว่ให้แฮกเกอร์สามารถเดาได้เลยว่า เราใช้ http://www.mycompany.com/admin ในการเข้าไปจัดการบริหาร Web Site ดังนั้นเราจึงควรเปลี่ยนเป็นคำอื่นที่ไม่ใช่ "/admin" ก็จะช่วยได้มาก

วิธีการทำ SQL injection ก็คือ แฮกเกอร์จะใส่ชื่อ username อะไรก็ได้แต่ password สำหรับการทำ SQL injection จะใส่เป็น Logic Statement ยกตัวอย่างเช่น ' or '1' = '1 หรือ " or "1"= "1

ถ้า Web Application ของเราไม่มีการเขียน Input Validation ดัก password แปลกๆ แบบนี้ แฮกเกอร์ก็สามารถที่จะ bypass ระบบ Authentication ของเราและ Login เข้าสู่ระบบเราโดยไม่ต้องรู้ username และ password ของเรามาก่อนเลย

วิธีการเจาะระบบด้วย SQL injection ยังมีอีกหลายแบบจากที่ยกตัวอย่างมา ซึ่งแฮกเกอร์รุ่นใหม่สามารถเรียนรู้ได้ทางอินเทอร์เน็ตและวิธีการทำก็ไม่ยาก อย่างที่ยกตัวอย่างมาแล้ว

วิธีการป้องกัน

นักพัฒนาระบบ (Web Application Developer) ควรจะระมัดระวัง input string ที่มาจากทางฝั่ง Client (Web Browser) และไม่ควรใช้วิธีติดต่อกับระบบภายนอกโดยไม่จำเป็น

ควรมีการ "กรอง" ข้อมูลขาเข้าที่มาจาก Web Browser ผ่านมาทางผู้ใช้ Client อย่างละเอียด และ ทำการ "กรอง" ข้อมูลที่มีลักษณะที่เป็น SQL injection statement ออกไปเสียก่อนที่จะส่งให้กับระบบฐานข้อมูล SQL ต่อไป

การใช้ Stored Procedure หรือ Trigger ก็เป็นทางออกหนึ่งในการเขียนโปรแกรมสั่งงานไปยังระบบฐานข้อมูล SQL ซึ่งมีความปลอดภัยมากกว่าการใช้ "Dynamic SQL Statement " กับฐานข้อมูล SQL ตรงๆ

การใช้ Prepare Statement
การส่งตัวแปรไปยัง statement โดยผ่าน jdbc หรือเรียกว่า variable binding ตัวอย่างเช่น
String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();

prepare statement จะช่วยป้องกัน SQL Injection ตัวอย่างถัดไปจะเป็นการส่งตัวแปรไปโดยตรงไปยัง prepare statement

String strUserName = request.getParameter("Txt_UserName");
PreparedStatement prepStmt = con.prepareStatement("SELECT * FROM user WHERE userId = '+strUserName+'");

การใช้ Hibernate
ใน Hibernate ก็จะใช้ propare statement แต่จะยังคงมีปัญหาเกี่ยวกับ injecting HQL statements ซึ่งจะอยู่ในลักษณะของ ORM อีก

upload webBorsaen

วันนี้ได้ทำการแก้ไขส่วน
-การแสดงผลไฟล์ประกวดราคา โดยแก้ไขส่วนเรียงลำดับใหม่
-ทำการเพิ่มส่วนแสดงรูปภาพ โดยได้ทำหน้าแสดงรูปขึ้นมาอีกไฟล์หนึ่ง

และหลังจากนั้นทำการ upload โดยไม่เอาไฟล์ psd นะ อืมลดไปครึ่งนึงเลยแหละ หลังจากการ upload เสร็จอืม ไฟล์เว็บเปงสีเหลืองอีกแว้ว แย่เลย เครียดอีกแร้ว แต่โชคดีอัลลอฮฺให้นึกขึ้นมาว่าทำมัยไม่ stop/start tomcat ใหม่หละ ก็เลยทำการ stop/start ใหม่เปงอันว่าได้ครับ (โล่งเลย)

สรุป คือว่าให้ stop/start tomcat ด้วยในกรณีที่เปงสีเหลืองนะเผื่อได้เพราะไฟล์ web.xml ก็เหมือนเดิม

Sunday, May 3, 2009

รายละเอียดค่าของ super hidden ใน regedit

เนื่องจากเจอไวรัสเลยไปกำหนดค่าของ super hidden เมื่อแก้ได้แล้ว(ด้วยวิธีอื่น) ก็เลยลืมค่าเดิมไป ทำให้ไฟล์ desktop.ini หน้า desktop แสดงตลอดเลย นี่คือรายละเอียดค่าเดิม

(Default) REG_SZ (value not set)
CheckedValue REG_DWORD 0x00000000 (0)
DefaultValue REG_DWORD 0x00000000 (0)

HelpID REG_SZ shell.hlp#51103
HKeyRoot REG_DWORD 0x80000001 (2147483649)
RegPath REG_SZ
Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced

Text REG_SZ @shell32.dll,-30508
Type REG_SZ checkbox
UncheckedValue REG_DWORD 0x00000001 (1)

ValueName REG_SZ ShowSuperHidden
WarningIfNotDefault REG_SZ @shell32.dll,-28964

กำหนดค่าให้ได้ตามนี้ ทำให้ไฟล์ desktop.ini ไม่แสดงแร้วเหมียนเดิมซะที

ไวรัสทำแสบ ซ่อนโฟลเดอร์ และไม่สามารถกด uncheck hidden ได้

โดนไวรัสของโรงเรียนมาโดยมันจะทำการซ่อนโฟลเดอร์ของเรา และก็สร้างโฟลเดอร์หลอกมา ดูๆแล้วก็ไม่น่ามีไรเจอบ่อย แต่ที่ไม่เหมือนเคยคือ มันกำหนดให้ปุ่ม hiddent ที่มัน check ไว้หนะ disable เลย จึงทำให้เราไม่สามารถที่จะกำหนดให้โฟลเดอร์นั้นๆหายจากการซ่อนได้ วิธีแก้คือต้องไป reset โฟลเดอร์นั้นเลย คือ
ตามรูปเลยครับ คือไปที่ cmd.exe แล้วพิมพ์
attrib -H -S drive:\(ไฟล์ หรือ โฟลเดอร์\*.*)
note ที่เพิ่ม \*.* นั้นกรณีที่ต้องการที่จะ reset ในโฟลเดอร์นั้นด้วย ถ้าไม่ได้เพิ่มก็จะทำเฉพาะโฟลเดอร์นั้นๆอะ

หรือถ้าต้องการข้อมูลเพิ่มเติมตามลิงค์นี้เลยคราบ
http://www.raymond.cc/blog/archives/2009/05/01/reset-system-and-hidden-attributes-for-files-or-folders-caused-by-virus/