PDA

View Full Version : سوال: چرا Regex.Replace بر طبق انتظار کاراکترها را حذف نمی کند؟



Behrouz1985
چهارشنبه 05 آبان 1389, 08:22 صبح
private string SanitizeInput(string input)
{
Regex badCharReplace = new Regex(@"^([<>""'%;()&])$");
string goodChars = badCharReplace.Replace(input,"a");
return goodChars;
}

این کد توی help ویژوال استودیو بود
ولی کار نمی کنه. مگه نباید یه رشته حاوی اون کاراکترا بهش بدی و این تابع اونا رو حذف کنه؟ پس چرا هیچ اتفاقی نمی افته؟!

r00tkit
چهارشنبه 05 آبان 1389, 09:40 صبح
حاوی ان کاراکترا نه

توی input باید این الگو وجود داشته باشه

Within a specified input string, replaces strings that match a regular expression pattern with a specified replacement string

pedram_ns
چهارشنبه 05 آبان 1389, 19:05 عصر
حالا اگر یک متغیر داشته باشی با این روش چطور می شه فیلتر کرد؟

دوستان می خوام با همین روش ابتدا یک مقدار رو از تکس باکس یا کوری بگیرم و کاراکترهای غیرمجاز رو از اون حذف کنم باید چطور بنویسم.
لطفا کامل توضیح بدید در این زمینه بی تجربه هستم.

mehdi.mousavi
پنج شنبه 06 آبان 1389, 00:39 صبح
سلام.
تابعی که نوشته اید رو به این تغییر بدید:


private string SanitizeInput(string input)
{
Regex badCharReplace = new Regex(@"[<>""'%;()&]");
return badCharReplace.Replace(input, string.Empty);
}


دقت کنید که ^ و $ رو من از ابتدا و انتهای اون الگو حذف کردم، و پارامتر دوم Replace رو نیز string.Empty رد کردم تا هر کدوم از اون کاراکترها که در ورودی پیدا شد، با string.Empty عوض بشه.

موفق باشید.

پاورقی: شما دقیقا هدفتون چیه؟ کدی که من نوشتم هر یک از اون کاراکترها رو در هر جای ورودی پیدا کنه، حذف میکنه. شما هم همینو می خواستید، درسته؟

Update: بسیار خوب، حدس میزنم که هدفتون جلوگیری از حملات XSS باشه. اگر اینطوره، این کارو با استفاده از Microsoft Web Protection Library (http://wpl.codeplex.com/) و توابعی که اون در اختیارتون قرار میده بدرستی انجام بدید.

pedram_ns
پنج شنبه 06 آبان 1389, 09:51 صبح
با سپاس از شما
من با vb کار می کنم و کدتون رو به این صورت نوشتم و چند سئوال دارم:



Private Function SanitizeInput(ByVal input As String) As String
Dim badCharReplace As New Regex("[<>""'%;()&]")
Return badCharReplace.Replace(input, String.Empty)
End Functionاگر به لیست regex یک کاراکتر دیگه مثل ^ اضافه کنم دیگه کار نمی کنه چرا؟

در مورد کوری ایا این مقادیر باید قبل از ارسال حذف بشه یا بعد از ارسال و هنگام ارتباط با دیتابیس؟

در مورد این فایل مایکروسافت راستش من در صفحه ایی که معرفی کردید نتونستم جایی پیدا کنم که دانلودش کنم لطفا راهنمایی کنید در ضمن بطور مختصر روش کارش رو هم توضیح بدید مثلا در مورد همین کار چک کردن یک مقدار استرینگ.

majnun
پنج شنبه 06 آبان 1389, 10:32 صبح
در مورد این فایل مایکروسافت راستش من در صفحه ایی که معرفی کردید نتونستم جایی پیدا کنم که دانلودش کنم لطفا راهنمایی کنید در ضمن بطور مختصر روش کارش رو هم توضیح بدید مثلا در مورد همین کار چک کردن یک مقدار استرینگ.


همین لینکی که داد دوست عزیزمون سمت راست نوشته دانلود دانلود کن دیگه :چشمک:

pedram_ns
پنج شنبه 06 آبان 1389, 10:38 صبح
اخه این یه فایل word است مگه نباید اسمبلی ایی چیزی باشه.

mehdi.mousavi
پنج شنبه 06 آبان 1389, 11:21 صبح
اخه این یه فایل word است مگه نباید اسمبلی ایی چیزی باشه.

سلام.
می تونید Installer اش رو از اینجا (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f4cd231b-7e06-445b-bec7-343e5884e651) بگیرید.


اگر به لیست regex یک کاراکتر دیگه مثل ^ اضافه کنم دیگه کار نمی کنه چرا؟

ببینید، اون کاراکتر معنا داره، و معناش اینه که کاراکتر مورد نظر باید در ابتدای عبارت قرار گرفته باشه. به بیان دیگه، اگر الگو رو این در نظر بگیریم:


^thisو ورودی ما این باشه:


this is a test, this test is a great test!در اینصورت فقط اولین test انتخاب میشه، چون در ابتدای رشته قرار گرفته... به همین ترتیب، $ نشاندهنده انتهای string هستش. برای اینکه با نحوه نوشتن این الگوها آشنا بشید، کتابی در این زمینه تهیه کنید، یا به MSDN مراجعه کنید.

موفق باشید.

pedram_ns
پنج شنبه 06 آبان 1389, 14:04 عصر
ممنون
1.می شه یک توضیح مختصری هم در مورد این antixss بدین در مورد چک کردن کوری و تکس باکس ها.

2.در مورد کدهای حذف کاراکترهای غیرمجاز سئوالی داشتم که این کاراکترها رو باید قبل از ارسال کوری استرینگ حذف کنم یا بعد از ارسال و در حین دریافت کوری؟