PDA

View Full Version : این مشکل من حتی با مطالعه مقاله تان برطرف نشد



rohollahmahmoodiany
یک شنبه 28 فروردین 1384, 02:02 صبح
وقتی که type فیلدها را nvarchar میگیرم و از طریق .net فیلدی را درج میکنم فقط حرف اول ان درج میشود اما اگر type از نوع ntext باشد مشکلی پیش نمیاید .حالا که ntext میگیرم از stored procedure زیر error میگیرد.
ALTER PROCEDURE SearchUsers
@loginVal ntext,@PasswordVal ntext
as
select login,password
from tblUsers where (tblusers.password like '%'+ @passwordVal+'%' and tblusers.login like '%'+ @loginVal+'%' )

حالا اگر کد را به صورت زیر در بیاورم error نمیگیرد اما هرچه این
stored procedure را در asp.net اجرا میکنم هیچ سطری را بر نمیگرداند.

ALTER PROCEDURE SearchUsers
@loginVal ntext,@PasswordVal ntext
as
select login,password
from tblUsers where (tblusers.password like @passwordVal and tblusers.login like @loginVal )

ببخشید اگه تکراریه!
متشکرم!

Spoofed
یک شنبه 28 فروردین 1384, 07:50 صبح
--) نیازی به استفاده از ntext نیست. وقتی برای مثال از nvarchar استفاده می کنی باید برای آن "طول"ی را مشخص کنی. در غیر اینصورت مسلما به اندازه کافی جا برای ذخیره کردن داده‌ها نخواهد داشت.
الف) در کد شما نیازی به استفاده از + نیست. نیازی به استفاده از ' هم نیست.
ب) منطق قسمت where شما غلط است. به این صورت موارد مشابه بررسی می شود و نه موارد دقیق هنگام لاگین که بسیار حساس است. باید بجای like از = استفاده کنی :

tblusers.password =@passwordVal and tblusers.login = @loginVal

ج) ورودی های خودت رو در این حالت دقیقا چک کن. چون به راحتی مورد حمله تزریق اس کیوال قرار می‌گیره.
د) شرکت "نص" یک کتاب در مورد Transact SQL مخصوص اس‌کیوال سرور دارد (به زبان فارسی)که حتما توصیه می‌شود.

rohollahmahmoodiany
دوشنبه 29 فروردین 1384, 01:08 صبح
اقای spoofer ممنون!
طول فیلد 20 است پس کافی است .پس به نطر شما حمله تزریق اس تنها مشکل باقی مانده است.ایا خود sql
تنطیماتی ندارد.

aidinwashere
دوشنبه 29 فروردین 1384, 03:32 صبح
مگر nvarchar طول undefined ندارد؟
اگر نه ,پس var مگر نشان دهنده variable نیست؟ (منظور "متغیر" است)

Spoofed
دوشنبه 29 فروردین 1384, 07:01 صبح
نه. nchar و nvarchar فرقشون در این است که اگر برای مثال طول nchar را 20 تعریف کنید و در آن مقدار xyz را قرار دهید 17 تای باقیمانده با space پر می شود (طول ثابت). اما در nvarchar فقط همان xyz ثبت می شود (طول متغیر).
از لحاظ کارآیی و سرعت nchar بهتر است.

aidinwashere
دوشنبه 29 فروردین 1384, 20:08 عصر
مرسی دوست من.

rohollahmahmoodiany
چهارشنبه 07 اردیبهشت 1384, 00:11 صبح
اقای spoofer ممنون!
طول فیلد 20 است پس کافی است .پس به نطر شما حمله تزریق اس تنها مشکل باقی مانده است.ایا خود sql
تنطیماتی ندارد.

rohollahmahmoodiany
جمعه 09 اردیبهشت 1384, 00:25 صبح
ایا دوستان نظری ندارند

Behrouz_Rad
جمعه 09 اردیبهشت 1384, 04:46 صبح
خیر. SQL تنظیماتی ندارد.
چون شما اجازه دستکاری SQL Server موجود بر روی سرور رو ندارید.
محافظت در مقابل تزریق اس کیو ال یا SQL Injection نیز به عنوان یکی از نکات مهم در حفظ امنیت داده ها و برنامه ی شما همیشه باید رعایت شود.