هل يمكنك كتابة الشيفرة الخاصة بالـ Query string؟ حتى أستطيع مساعدتك
أحد الحلول أن تنشئ تابع يقوم بعمل فلترة للقيم الخارجية الموجودة في رابط الصفحة والتي يتم تخزينها في قاعدة البيانات وتقوم باستدعاء هذا التابع عند كل عملية استعلام.
طريقة الفلترة تعتمد على إيجاد جميع القيم (النصوص) التي يمكن كتابتها لعمل الإختراق من نوع Reflected Xss بما فيها أسماء الجداول في قاعدة البيانات الخاصة بالموقع وجمل الاستعلام وشروطها.
فيما يلي تابع يُرجع قائمة List من نوع String تحوي جميع القيم المحتملة لعمل Reflected Xss:
private static List<string> blackList()
{
var result = new List<string>()
{
"where",
"Step2_Process",
"Step2_ProcessRoomRate",
"Step2_ProcessRoom",
"CurrencyRate",
"TopDist",
"UAction",
"H_Book",
"H_Amenity",
"M_Hotel",
"Agent",
"H_Description",
"AgentMove",
"M_Room",
"H_Destination",
"H_Hotel",
"Nationality",
"M_DateRange",
"Msg",
"TempResult",
"FROM master",
"select",
"select *",
"drop",
"update",
"insert into",
"delete from",
"where",
"/'",
"'",
"--",
"1 OR 1=1",
"1' OR '1'='1",
"1'1",
"1 EXEC SP_ (or EXEC XP_)",
"1 AND 1=1",
"1' AND 1=(SELECT COUNT(*) FROM",
"1 AND USER_NAME() = 'dbo'",
"\'; DESC",
"1\'1",
"@@",
"SELECT @@version",
"SELECT user",
"SELECT system_user",
"northwind",
"model",
"msdb",
"tempdb",
"pubs",
"EXEC",
" sp_",
"SELECT HOST_NAME()",
"CREATE TABLE",
"BULK INSERT",
"DROP TABLE",
"xp_cmdshell",
"sysobjects",
"dbo",
"where",
"select"
};
return result;
}
بعد ذلك كتابة التابع FilterText والذي يستخدم التابع blackList لفحص النص إن كان يحوي أي من تلك القيم كما في المثال التالي:
public static String FiltterText(String text)
{
String tempText = text;
bool isOk = true;
foreach (string item in blackList())
{
if (text.ToLower().Contains(item.ToLower()))
{
int index = text.ToLower().IndexOf(item.ToLower());
text = text.Remove(index, item.Length);
isOk = false;
}
}
if (!isOk)
{
RSecurity.logAction("SQL Fillter", "HZTR-000001", HttpContext.Current.Session[SessionStatic.UserName] + " try to hack with this sql: (" + tempText.Replace("'", "''") + ")", "", "", "", HttpContext.Current.Request.Url.AbsolutePath, RSecurity.LogAction_danger_activity, RSecurity.LogType_SQLHaker);
}
return text.Trim();
}
أرجو أن أكون قد وُفقت في تقديم الحل.
بالتوفيق