View Full Version : امنیت در فایل fr3 مربوط به گزارش fast report
Borland-Delphi7
سه شنبه 03 اردیبهشت 1387, 11:16 صبح
با سلام
من چند وقتیه که گزارشاتمو با fast میسازم و باید درون یک فایل ذخیره کرد که همراه پروژه باشه
بدی این کار اینه که هر کسی که یکم fast بلد باشه میاد اون فایلو ویرایش میکنه و گزارشات رو به اسم خودش ثبت میکنه آیا راهی برای جلو گیری از این کار هست یا باید با Quick report کار کنم(اگر راهی نیست یه گزارش ساز مثل quick که نیاز به فایل گزارش نداره سراغ دارین)
vcldeveloper
سه شنبه 03 اردیبهشت 1387, 18:22 عصر
خودش قابلیت کد کردن گزارش ها و دریافت پسورد برای بازکردن آنها را دارد.
Borland-Delphi7
سه شنبه 03 اردیبهشت 1387, 22:32 عصر
خودش قابلیت کد کردن گزارش ها و دریافت پسورد برای بازکردن آنها را دارد.
مننون از لطف شما کمی گشتم پسورد گزاری کردم ولی برای باز کردنش توسط کد از من پسورد میخواد چه طور این قسمت رو کد نویسی کنم
راستی به جز پسورد گذاری کد هم میشه
vcldeveloper
چهارشنبه 04 اردیبهشت 1387, 00:49 صبح
می تونید در رویدادی مثل OnBeginDoc مقدار Password رو تنظیم کنید.
غیر از این کارها، خودتون هم می تونید فایل رو به هر نحوی که خواستید کد کدگزاری کنید و فقط در زمان اجرای گزارش آن را از کدگزاری خارج کنید.
Borland-Delphi7
چهارشنبه 04 اردیبهشت 1387, 07:02 صبح
می تونید در رویدادی مثل OnBeginDoc مقدار Password رو تنظیم کنید..
میشه یه مثال بزنی من از این طریق( منو گزارش - گزینه ها - کلمه رمز) برای فایل پسورد گذاشتم
dm.frxreport1.OnBeginDoc
چطوری کد بنویسم
vcldeveloper
چهارشنبه 04 اردیبهشت 1387, 10:32 صبح
وقتی گزارشی در FR لود میشه، اگر با پسورد محافظت شده باشه، باید قبل از لود گزارش مقدار پسورد هم مشخص باشه. OnBeginDoc قبل از لود گزارش فراخوانی میشه، پس شما می تونید در اون رویداد مقدار frxReport1.ReportOption.Password را تنظیم کنی تا FR موقع لود کردن گزارش از اون پسورد استفاده کنه و فایل رو باز کنه.
اگر هم خودتون میخواید فایل رو کدگزاری کنید، قبلا روش های زیادی برای این کار مطرح شده.
Borland-Delphi7
چهارشنبه 04 اردیبهشت 1387, 14:10 عصر
ممنون از توضیح شما ولی من هنوز متوجه نشدم frxReport1.ReportOptions.Password
رو در event BeginDoc بزارم یا قبل از load مثل پائین البته هر دو رو تست کردم بازم پنجره login میاد
frm_dm.frxReport1.ReportOptions.Password:='1111';
frm_dm.frxreport1.LoadFromFile( ExtractFilePath(application.ExeName)+'Reports\rep. fr3');
frm_dm.frxreport1.ShowReport();
vcldeveloper
چهارشنبه 04 اردیبهشت 1387, 15:10 عصر
OnBeginDoc قبل از لود شدن گزارش فراخوانی میشه. می تونید برای OnBeginDoc کد بنویسید، یا همون کاری که در پست قبل انجام دادید رو انجام بدید. مسئله اینه که قبل از لود شدن گزارش، پسورد براش تنظیم شده باشه.
Borland-Delphi7
چهارشنبه 04 اردیبهشت 1387, 16:21 عصر
شرمنده نمودونم من دیر میگیرم یا مشکل جایی دیگست
من این کارو کردم قبل از لود شدن نشود
procedure Tfrm_dm.frxReport1BeginDoc(Sender: TObject);
begin
frxReport1.ReportOptions.Password:='1111';
end;
vcldeveloper
چهارشنبه 04 اردیبهشت 1387, 19:05 عصر
شرمنده نمودونم من دیر میگیرم یا مشکل جایی دیگست
من این کارو کردم قبل از لود شدن نشود
به نظر میاد مشکل از خود FR باشه. وقتی گزارش بصورت StoreInDFM هست، مشکلی نیست. ولی وقتی فایل گزارش بصورت جداگانه (fr3.*) ذخیره میشه، حتی اگر خصوصیت Password قبل از لود کردن گزارش از فایل تنظیم بشه، با لود کردن گزارش مقدار اون ریست میشه و پنجره دریافت پسورد ظاهر میشه.
راهی که من به نظرم میرسه اینه که شما از روش دیگه ایی برای حفاظت از گزارش هاتون استفاده کنید، مثلا می تونید فایل گزارش رو خودتون کدگزاری کنید و در زمان لود کردنش، ابتدا آن را در یک Stream دیکد کنید و با استفاده از LoadFromStream از frxReport آن را لود کنید.
مثلا چیزی شبیه به این:
procedure DecodeFile(const FileName: string; Dest: TStream);
var
F : TFileStream;
begin
if not Assigned(Dest) then Exit;
F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
{Decode F stream into Dest stream here}
finally
F.Free;
end;
end;
function LoadReport(ReportObj: TfrxReport; const FileName: TFileName): Boolean;
var
Stream : TMemoryStream;
begin
Result := False;
if not Assigned(ReportObj) then Exit;
Stream := TMemoryStream.Create;
try
DecodeFile(FileName, Stream);
if Assigned(Stream) then
begin
ReportObj.LoadFromStream(Stream);
ReportObj.ShowReport();
Result := True;
end;
finally
Stream.Free;
end
end;
مثالی از استفاده از توابع بالا:
if not LoadReport(Form1.frxReport1,'Test.fr3') then
Raise Exception.Create('Error in loading the report file');
در کد بالا فرض شده که شما تابعی به نام DecodeFile دارید که اسم فایل رو میگیره و اونو رمزگشایی میکنه و در یک stream ذخیره میکنه. بعد از اینکه فایل رمزگشایی شد، stream مربوطه به شی گزارش داده میشه تا اونو در خودش لود کنه و نمایش بده.
البته تابع DecodeFile در مثال بالا پیاده سازی نشده. خودتون باید یه الگوریتمی برای رمز کردن گزارش هاتون پیدا کنید و هر گزارش رو بعد از اینکه ساخته شد، با اون الگوریتم کدگزاری کنید، و بعد در تابع DecodeFile فایل گزارش کدگزاری شده رو رمزگشایی کنید. اگر خودتون آشنایی چندانی با این مقولات ندارید، مجموعه کامپوننت TurboPower LockBox که بصورت Open-source ارائه میشه، میتونه عملیات کدگزاری و رمزگشایی فایل رو براتون انجام بده. غیر از اون کدهای دیگه ایی هم برای این کار در اینترنت پیدا میشند.
Borland-Delphi7
جمعه 06 اردیبهشت 1387, 15:53 عصر
ممنون ولی اگر روش پسوردیه کار کنه خیلی راحت تره یه دوری توش بزن ببین به جایی میرسی میخواستم در سایت دلفی مجیک که نماینده فست هست بپرسم دیدم سایتش هک شده
farhad110
یک شنبه 15 اردیبهشت 1387, 10:26 صبح
هر کسی که یکم fast بلد باشه میاد اون فایلو ویرایش میکنه و گزارشات رو به اسم خودش ثبت میکنه
با سلام. اگر مسئله فقط نام طراح هست چرا از يك روش ساده تر استفاده نميكنيد؟ مقدار دهي قسمت مربوطه رو از داخل برنامه انجام بديد.
vcldeveloper
دوشنبه 16 اردیبهشت 1387, 19:04 عصر
اگر روش پسوردیه کار کنه خیلی راحت تره یه دوری توش بزن ببین به جایی میرسی
شرمنده! وقت برای این کارها ندارم. شما چرخ رو بزن، اگر مشکل برطرف شد، خودت مشکل خودت رو حل کردی.
cybercoder
سه شنبه 17 اردیبهشت 1387, 02:45 صبح
خودتون هم می تونید فایل رو به هر نحوی که خواستید کد کدگزاری کنید و فقط در زمان اجرای گزارش آن را از کدگزاری خارج کنید.
فقط ممکنه یکی پیدا شه و زمانی که preview گرفته می شه با استفاده از ابزارهای زیادی که هست آخرین تغییرات فایلی رو در کل هارد چک کنه و یه کپی خیلی شیک و تمیز از فایل دیکد شده بگیره!!
vcldeveloper
سه شنبه 17 اردیبهشت 1387, 03:31 صبح
فقط ممکنه یکی پیدا شه و زمانی که preview گرفته می شه با استفاده از ابزارهای زیادی که هست آخرین تغییرات فایلی رو در کل هارد چک کنه و یه کپی خیلی شیک و تمیز از فایل دیکد شده بگیره!!لزومی نداره که داده های دیکد شده را در یک فایل بریزید! میشه فایل را در یک Stream دیکد کرد. در اون صورت، فرد مربوطه باید فضای آدرس پروسه مربوط به برنامه رو dump کنه تا بتونه به اون داده ها دسترسی پیدا کنه. لزومی نداره که برای چندتا گزارش بخواییم برنامه رو از این مسئله هم مصون کنیم، ولی اگر لازم بود، تکنیک های مختلفی برای کد کردن بخش هایی از فضای آدرس پروسه وجود داره و برنامه های مختلفی از این تکنیک ها استفاده می کنند.
HAMRAHSOFT.IR
یک شنبه 24 دی 1391, 21:39 عصر
فایلهای fr3 با چه برنامه میشه باز کرد؟
vbhamed
دوشنبه 30 بهمن 1391, 09:36 صبح
سلام
مي دونم تاپيك مال قبل هست ولي منم اين مشكل رو داشتم، از اونجايي كه من نسخه قانوني فست ريپورت رو دارم و داخل سايتش پشتيباني ميشم جهت اين مشكل ازشون سؤال كردم و اونهام با نهايت احترام خاصيت HiddenPassword رو به كامپوننت اضافه كردن بنابراين به جاي خاصيت Password ميتونيد از خاصيت HiddenPassword استفاده كنيد و اينطوري ديگه موقع ورود پسورد نميخواد
واقعا پشتيبانيشون حرف نداره، به درخواست خود من چند مورد به كامپوننت اضافه كردن
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.