ÐÑегледÑÑ Ð½Ð° ненадежден PDF Ñайл вÑв ваÑеÑо ÑобÑÑвено пÑиложение е опеÑаÑивно ÑеÑение и Ñова, коеÑо има знаÑение, не е инÑеÑÑейÑÑÑ (chrome) на визÑализаÑоÑа, а Ñова, коеÑо панелÑÑ Ð¾Ñказва да напÑави Ñам. Ðе запиÑвайÑе Ñайла на диÑка. Ðе позволÑвайÑе на неговиÑе вÑÑзки да изпÑлнÑÐ²Ð°Ñ Ð²ÑнÑни команди. Ðе давайÑе пÑÑ Ð½Ð° неговиÑе пÑикаÑени Ñайлове. ÐовеÑеÑо Ð¾Ñ ÑеÑиÑе Ð¾Ñ Ð·Ð»Ð¾Ð²Ñеден докÑÐ¼ÐµÐ½Ñ Ð¸Ð´Ð²Ð°Ñ Ð½Ðµ Ð¾Ñ ÐµÐºÑÐ¿Ð»Ð¾Ð¹Ñ Ð² ÑдÑоÑо, а Ð¾Ñ Ð²Ð¸Ð·ÑализаÑоÑ, изпÑлнÑÐ²Ð°Ñ Ð½Ð°Ð¿Ñлно обиÑайни неÑа Ñ Ð²Ñведени Ð¾Ñ Ð½Ð°Ð¿Ð°Ð´Ð°ÑÐµÐ»Ñ Ð´Ð°Ð½Ð½Ð¸: оÑваÑÑне на file:// вÑÑзка кÑм UNC Ñподелен ÑеÑÑÑÑ, коÑÑо ÑазкÑива NTLM иденÑиÑикаÑионни данни, оÑÑавÑне на копие в ÑамкиÑе на вÑеменнаÑа диÑекÑоÑÐ¸Ñ (temp), или копиÑане на вгÑадени Ñайлове навÑÑкÑде, кÑдеÑо поÑоÑва имеÑо на Ñайла. PDFium Component е PDF визÑализаÑÐ¾Ñ Ñ Ð¸Ð·Ñ
оден код за Delphi, C++Builder и Lazarus и Ñой поÑÑÐ°Ð²Ñ ÑÑоÑвеÑниÑе пÑевклÑÑваÑели Ñам, кÑдеÑо можеÑе да ги доÑÑигнеÑе: Ñлаг пÑи заÑеждане, койÑо ÑпиÑа ÑкÑипÑовеÑе, ÑÑбиÑÐ¸Ñ Ð¿Ñи кликване вÑÑÑ
Ñ Ð²ÑÑзки, коиÑо можеÑе да оÑÑ
вÑÑлиÑе, доÑÑÑп до пÑикаÑени Ñайлове пÑез Ð²Ð°Ñ ÑобÑÑвен код и ÑеÑими биÑове за пÑава. РедÑÑ Ð¿Ð¾-Ð´Ð¾Ð»Ñ Ñледва докÑменÑа Ð¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, в койÑо Ñой пÑиÑÑигне, до моменÑа, в койÑо поÑÑебиÑелÑÑ ÐºÐ»Ð¸ÐºÐ½Ðµ вÑÑÑ
Ñ Ð½ÐµÑо в него.
Ðодел на Ð·Ð°Ð¿Ð»Ð°Ñ Ð¸ за панела за пÑедваÑиÑелен пÑеглед
ÐÑдеÑе ÑеÑÑни за Ñова какво ви ноÑи âÑигÑÑниÑÑ Ð¿Ñегледâ? РендиÑаÑиÑÑ Ð¼Ð¾Ð´Ñл анализиÑа ненадеждни байÑове, незавиÑимо какво пÑавиÑе, а заÑиÑаÑа на ÑамоÑо ÑдÑо е оÑноваÑа, вÑÑÑ
Ñ ÐºÐ¾ÑÑо ÑÑÑпваÑе. ÐÑиÑко над Ñази оÑнова е полиÑика на пÑиложениеÑо: дали ÑкÑипÑовеÑе Ñе иниÑииÑаÑ, какво пÑави кликванеÑо вÑÑÑ
Ñ Ð²ÑÑзка, дали вгÑадениÑе Ñайлове Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° доÑÑÐ¸Ð³Ð½Ð°Ñ Ð´Ð¾ диÑка, дали клипбоÑдÑÑ Ð¸ пÑинÑеÑÑÑ Ñа оÑвоÑени вÑаÑи или пÑегÑади. Ðдно неÑо, коеÑо ÑÑÑбва да оÑпиÑеÑе оÑÑано, е пÑевклÑÑваÑелÑÑ FPDF_SetSandBoxPolicy на ÑдÑоÑо. ÐовеÑеÑо огÑаниÑÐµÐ½Ð¸Ñ Ð² него Ñа компилиÑани диÑекÑно, пÑевклÑÑваÑелÑÑ Ð¿ÑÐ¾Ð¼ÐµÐ½Ñ Ð¼Ð°Ð»ÐºÐ¾ в пÑакÑикаÑа, а ÑазÑиÑанеÑо на него за изолаÑÐ¸Ñ ÑÑздава ÑалÑиво ÑÑвÑÑво на ÑигÑÑноÑÑ, Ñе ÑÑе напÑавили неÑо. ÐогаÑо вÑ
одниÑе данни Ñа наиÑÑина опаÑни (напÑÐ¸Ð¼ÐµÑ Ð¿ÑблиÑен поÑÑал за каÑване на Ñайлове), единÑÑвенаÑа Ñеална изолаÑÐ¸Ñ Ðµ ÑендиÑанеÑо в оÑделен пÑоÑÐµÑ Ñ Ð½Ð¸Ñки пÑивилегии и изпÑаÑанеÑо на биÑмапи кÑм поÑÑебиÑелÑÐºÐ¸Ñ Ð¸Ð½ÑеÑÑейÑ. ФлаговеÑе в ÑамкиÑе на пÑоÑеÑа Ñа пÑоÑÑо полиÑика. Те не Ñа заÑиÑна баÑиеÑа.
Ðве облаÑÑи Ñа леÑни за забÑавÑне именно заÑоÑо никое кликване не ги докоÑва диÑекÑно. ÐÑÑваÑа е вÑеменниÑе Ñайлове. Ðко ваÑиÑÑ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑ Ð·Ð°Ð¿Ð¸Ñва вÑ
одÑÑиÑе докÑменÑи на диÑка пÑеди пÑегледа, Ñези вÑеменни ÐºÐ¾Ð¿Ð¸Ñ Ð¾ÑÑÐ°Ð²Ð°Ñ Ð¸ Ñлед кÑÐ°Ñ Ð½Ð° ÑеÑиÑÑа, оÑвен ако неÑо гаÑанÑиÑано не ги изÑÑие. ÐÑеки Ñайл, койÑо може да Ñе вÑзÑÑанови Ð¾Ñ Ð²ÑеменнаÑа диÑекÑоÑиÑ, ÑиÑ
о Ð·Ð°Ð¾Ð±Ð¸ÐºÐ°Ð»Ñ ÐºÐ¾Ð½ÑÑола, наложен Ð¾Ñ ÑÐ°Ð¼Ð¸Ñ Ð¿Ð°Ð½ÐµÐ». ÐаÑеждайÑе ÑайловеÑе диÑекÑно Ð¾Ñ Ð¿Ð°Ð¼ÐµÑÑа ÑÑез TPdfStreamAdapter, Ñака Ñе поÑенÑиално опаÑниÑе байÑове никога да не полÑÑÐ°Ð²Ð°Ñ Ñвой ÑобÑÑвен пÑÑ Ð½Ð° диÑка. ÐÑоÑаÑа облаÑÑ Ðµ клипбоÑдÑÑ. ÐÑедваÑиÑелен пÑеглед, койÑо позволÑва маÑкиÑане и копиÑане, веÑе е изнеÑÑл докÑменÑа (екÑан по екÑан) и никакво пÑиÑ
ваÑане на вÑÑзки нÑма да ÑпÑе Ñова.
СпиÑане на JavaScript пÑи заÑеждане, а не в поÑÑебиÑелÑÐºÐ¸Ñ Ð¸Ð½ÑеÑÑейÑ
JavaScript в PDFium Component Ñе иниÑииÑа Ñамо заедно ÑÑÑ ÑÑедаÑа за попÑлване на ÑоÑмÑлÑÑи (form-fill). СледоваÑелно заÑежданеÑо Ñ FormFill := False изклÑÑва ÑкÑипÑовеÑе в коÑена, вмеÑÑо пÑоÑÑо да поÑиÑка ÑимпÑомиÑе им:
procedure TPreviewPane.LoadUntrusted(const FilePath: string);
begin
Pdf.FileName := FilePath;
Pdf.FormFill := False; // no form environment, hence no JavaScript engine
Pdf.Active := True;
FPermissions := Pdf.Permissions; // raw flag word; all bits set = unrestricted
end;
ÐомпÑомиÑÑÑ Ðµ Ñеален и ÑÑÑбва да бÑде ÑаÑÑ Ð¾Ñ Ð²Ð°ÑаÑа ÑпеÑиÑикаÑиÑ. ÐÑи изклÑÑено попÑлване на ÑоÑмÑлÑÑи легиÑимниÑе AcroForm взаимодейÑÑÐ²Ð¸Ñ Ð¸ ÑкÑипÑове за валидиÑане ÑÑÑо изÑезваÑ. ÐолеÑаÑа Ñе ÑендиÑÐ°Ñ Ñ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ñи запиÑан вид, но не Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ ÑедакÑиÑани. Ðа панел за пÑедваÑиÑелен пÑеглед Ñова обикновено е пÑавилноÑо ÑеÑение, ÑÑй каÑо пÑегледÑÑ Ð¾Ð·Ð½Ð°Ñава Ñазглеждане, а не попÑлване. Ðо ако ÑÑÑиÑÑ Ð¿ÑозоÑÐµÑ ÑлÑжи и за попÑлване на ÑоÑмÑлÑÑи за довеÑени вÑÑÑеÑни докÑменÑи, ÑеÑениеÑо е два ÑазлиÑни пÑÑÑ Ð·Ð° заÑеждане Ñ Ð¸Ð·ÑиÑно ÑеÑение за довеÑие Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ , а не един компÑомиÑен пÑÑ, койÑо е ÑвÑÑде Ñ Ð»Ð°Ð±Ð°Ð² за опаÑÐ½Ð¸Ñ ÑлÑÑай и ÑвÑÑде ÑÑÑог за довеÑениÑ. СÑÑанаÑа на попÑлванеÑо на ÑоÑмÑлÑÑи има Ñвои ÑобÑÑвени клопки, Ñазгледани в маÑеÑиала за навигаÑÐ¸Ñ Ð² полеÑаÑа на ÑоÑмÑлÑÑи и ÑегенеÑиÑане на вÑнÑÐ½Ð¸Ñ Ð²Ð¸Ð´.
ÐÑÑзки: ÑÑандаÑÑниÑÑ Ð¼Ð°Ð½Ð¸Ð¿ÑлаÑÐ¾Ñ Ð¸Ð·Ð¿ÑлнÑва вÑнÑни команди
Ðко бÑÐ´Ð°Ñ Ð¾ÑÑавени без конÑÑол, кликваниÑÑа вÑÑÑ
Ñ Ð²ÑÑзки оÑÐ¸Ð²Ð°Ñ Ð´Ð¸ÑекÑно кÑм опеÑаÑионнаÑа ÑиÑÑема. СÑандаÑÑниÑе LinkOptions на визÑализаÑоÑа вклÑÑÐ²Ð°Ñ loAutoOpenURI, коеÑо е пÑедпоÑÑавка за изÑиÑане на данни Ð¾Ñ Ñип file:// кÑм UNC ÑеÑÑÑÑи. Ðве ÑÑбиÑÐ¸Ñ Ð¿ÑедÑÑавлÑÐ²Ð°Ñ ÐºÑиÑиÑнаÑа ÑоÑка: OnWebLinkClick за URL адÑеÑи, оÑкÑиÑи в ÑекÑÑа на ÑÑÑаниÑаÑа, и OnAnnotationLinkClick за аноÑаÑии на вÑÑзки, ноÑеÑи URI или дейÑÑÐ²Ð¸Ñ Ð·Ð° ÑÑаÑÑиÑане. ÐадайÑе безкомпÑомиÑно Handled := True и в двеÑе ÑÑбиÑиÑ, пÑеди да вземеÑе каквоÑо и да е ÑеÑение, и Ñлед Ñова ÑазÑеÑеÑе Ñамо Ñова, коеÑо полиÑикаÑа позволÑва. ÐаÑо вÑоÑи заÑиÑен Ñлой пÑемаÑ
неÑе loAutoOpenURI Ð¾Ñ LinkOptions за опаÑни вÑ
одни данни и Ñе ÑвеÑеÑе, Ñе опÑиÑÑа loAutoLaunch, коÑÑо е изклÑÑена по подÑазбиÑане, никога не Ñе акÑивиÑа оÑново ÑÑез копиÑане на конÑигÑÑаÑии:
procedure TPreviewPane.PdfViewWebLinkClick(Sender: TObject;
const Url: WString; var Handled: Boolean);
begin
Handled := True; // never fall through to the default shell behavior
if (AnsiStartsText('https://', Url) or AnsiStartsText('http://', Url))
and HostIsAllowed(Url) then
OpenInBrowser(Url)
else
FAudit.LogBlockedLink(FDocumentId, Url);
end;
Ðве подÑобноÑÑи опÑеделÑÑ Ð´Ð°Ð»Ð¸ Ñова наиÑÑина ÑабоÑи. ÐÑÑво, пÑовеÑкаÑа на ÑÑ
емаÑа на адÑеÑа ÑÑÑбва да бÑде пÑовеÑка на пÑеÑикÑа на необÑабоÑÐµÐ½Ð¸Ñ Ð½Ð¸Ð· пÑеди вÑÑкакÑв анализ, ÑÑй каÑо file://, UNC пÑÑиÑа и екзоÑиÑни ÑÑ
еми Ñа ÑоÑно Ñези ÑÑойноÑÑи, коиÑо ÑÑÐ¸Ð²Ð°Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½ URL анализаÑÐ¾Ñ Ð¸Ð»Ð¸ пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð¿Ñез ÑакÑв, койÑо ноÑмализиÑа низовеÑе ÑвÑÑде агÑеÑивно. ÐÑоÑо, запиÑвайÑе вÑÑко блокиÑане Ñ Ð¿Ñиложена иденÑиÑноÑÑ Ð½Ð° докÑменÑа. ÐÑколко блокиÑани file:// вÑÑзки Ñа пÑоÑÑо Ñонов ÑÑм, но вÑлна Ð¾Ñ ÑÑÑ
в множеÑÑво вÑ
одÑÑи докÑменÑи за кÑаÑÑк пеÑиод Ð¾Ñ Ð²Ñеме е инÑиденÑ, за койÑо ваÑиÑÑ ÐµÐºÐ¸Ð¿ по ÑигÑÑноÑÑÑа би иÑкал да наÑÑи веднага.
ÐÑикаÑени Ñайлове: полиÑика за ÑазÑиÑениÑÑа и имеÑо на Ñайла, коеÑо не ÑÑе избÑали
PDF ÑайлÑÑ Ðµ конÑÐµÐ¹Ð½ÐµÑ Ð¸ ÑвойÑÑваÑа AttachmentCount и AttachmentName[] ви ÐºÐ°Ð·Ð²Ð°Ñ ÐºÐ°ÐºÐ²Ð¾ ÑÑдÑÑжа Ñой, пÑеди неÑо да докоÑне диÑка. ТÑк Ñа важни два оÑделни конÑÑолни меÑ
анизма и Ñамо единиÑÑ Ð¾Ñ ÑÑÑ
е оÑевиден. ÐÑевидниÑÑ Ðµ полиÑикаÑа за ÑиповеÑе Ñайлове: бÑл ÑпиÑÑк (allowlist) Ñ ÑазÑиÑениÑ, коиÑо Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ ÐµÐºÑпоÑÑиÑани. Ðо-деликаÑниÑÑ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ðµ, Ñе имеÑо на пÑикаÑÐµÐ½Ð¸Ñ Ñайл е изÑÑло конÑÑолиÑано Ð¾Ñ Ð½Ð°Ð¿Ð°Ð´Ð°ÑелÑ. ÐгÑадено име как ..\..\Startup\update.exe пÑевÑÑÑа небÑежноÑо запазване в ÑÑзвимоÑÑ Ð¾Ñ Ñип âпÑеминаване пÑез диÑекÑоÑииâ?(path traversal), коÑÑо запиÑва изпÑлним Ñайл в папка, ÑÑаÑÑиÑана Ð¾Ñ Windows пÑи влизане в ÑиÑÑемаÑа. ÐомпоненÑÑÑ Ð²Ð¸ пÑедоÑÑÐ°Ð²Ñ Ð²Ð³ÑадениÑе данни как байÑове ÑÑез Attachment[] и оÑÑÐ°Ð²Ñ Ð²Ð°ÑиÑÑ ÐºÐ¾Ð´ да избеÑе пÑÑÑ Ð·Ð° запиÑ. ÐаÑова изгÑаждайÑе Ñози пÑÑ Ð¾Ñ Ð¸Ð·ÑиÑÑено базово име на Ñайл, а никога Ð¾Ñ Ð¾ÑÐ¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ð²Ð³Ñаден низ:
procedure TPreviewPane.ExportAttachment(Index: Integer; const TargetDir: string);
var
RawName, SafeName, Ext: string;
Data: TBytes;
begin
RawName := string(Pdf.AttachmentName[Index]);
SafeName := ExtractFileName(RawName); // strips any path components
Ext := LowerCase(ExtractFileExt(SafeName));
if not FAllowedExt.Contains(Ext) then // allowlist, not blocklist
raise EPreviewPolicy.CreateFmt('Attachment type %s blocked by policy', [Ext]);
Data := Pdf.Attachment[Index]; // embedded payload as raw bytes
TFile.WriteAllBytes(
IncludeTrailingPathDelimiter(TargetDir) + SafeName, Data);
end;
ÐÑедпоÑиÑайÑе подÑ
ода Ñ Ð±Ñл ÑпиÑÑк. ЧеÑниÑÑ ÑпиÑÑк Ñ âопаÑниâ?ÑазÑиÑÐµÐ½Ð¸Ñ Ðµ ÑÑÑÑезание, коеÑо Ñе загÑбиÑе в денÑ, в койÑо нÑкой използва ÑазÑиÑение, за коеÑо никога не ÑÑе ÑÑвали. ÐелиÑÑ ÑпиÑÑк Ñ .pdf, .png и .csv гаÑанÑиÑа ÑигÑÑноÑÑ Ð¿Ð¾ подÑазбиÑане.
Ðакво вÑÑÑноÑÑ Ð³Ð°ÑанÑиÑÐ°Ñ Ð¿ÑаваÑа за ÑиÑÑоване
СÑандаÑÑниÑÑ Ð¼Ð¾Ð´Ñл за ÑигÑÑноÑÑ Ð½Ð° ISO 32000-1 кодиÑа Ñлагове за пÑава за пеÑаÑ, копиÑане на ÑÑдÑÑжание и модиÑикаÑиÑ. СвойÑÑваÑа Permissions и UserPermissions ги Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ ÐºÐ°Ñо необÑабоÑени биÑови маÑки Ñлед оÑваÑÑнеÑо на докÑменÑа. ТаблиÑа 22 Ð¾Ñ ISO 32000-1 деÑиниÑа Ñези биÑове, а неÑиÑÑованиÑÑ Ñайл докладва, Ñе вÑиÑки биÑове Ñа зададени. ÐÑоÑиÑайÑе ги и ги ÑпазвайÑе на ниво команди вÑв ваÑеÑо пÑиложение, но бÑдеÑе наÑÑно какво вÑÑÑноÑÑ Ð¿ÑедÑÑавлÑÐ²Ð°Ñ Ñе. ÐÑи докÑменÑ, ÑиÑÑован Ñ Ð¿Ð°Ñола на ÑобÑÑвеника (owner password) и пÑазна поÑÑебиÑелÑка паÑола, ÑÑдÑÑжаниеÑо Ñе деÑиÑÑиÑа напÑлно пÑи оÑваÑÑне. Тези Ñлагове Ñа пÑоÑÑо молба кÑм ÑÑвмеÑÑимиÑе визÑализаÑоÑи, а не ÑеÑ
ниÑеÑки наложен меÑ
анизÑм за заÑиÑа. Това има две поÑледÑÑвиÑ, коиÑо водÑÑ Ð² пÑоÑивоположни поÑоки. ÐÑÑво, никога не пÑедÑÑавÑйÑе Ñези пÑава на поÑÑебиÑелиÑе каÑо Ñеално ÑвойÑÑво за ÑигÑÑноÑÑ Ð½Ð° докÑменÑиÑе, ÑÑй каÑо Ñе не Ñа Ñакова. ÐÑоÑо, ÑпазвайÑе биÑа за извлиÑане за доÑÑÑпноÑÑ (Ð±Ð¸Ñ 10), доÑи когаÑо обÑоÑо копиÑане (Ð±Ð¸Ñ 5) е забÑанено. ÐоÑÑÑпÑÑ Ð·Ð° екÑанни ÑеÑÑи е оÑделен ÑмиÑлено в модела на пÑаваÑа и пÑемаÑ
ванеÑо мÑ, Ñамо заÑоÑо âкопиÑанеÑо е изклÑÑеноâ? наÑÑÑава ÑабоÑаÑа на аÑиÑÑиÑаÑиÑе ÑеÑ
нологии без Ñеална полза за ÑигÑÑноÑÑÑа.
ÐалагайÑе забÑанениÑе дейÑÑÐ²Ð¸Ñ Ð½Ð° ниво команда, а не ÑÑез ÑкÑиване на бÑÑони Ð¾Ñ Ð»ÐµÐ½ÑаÑа Ñ Ð¸Ð½ÑÑÑÑменÑи. ÐлавиÑнаÑа комбинаÑÐ¸Ñ Ctrl+C, конÑекÑÑниÑе менÑÑа и маÑкиÑанеÑо Ñ Ð²Ð»Ð°Ñене леÑно заобикалÑÑ Ð±ÑÑониÑе на ленÑаÑа Ñ Ð¸Ð½ÑÑÑÑменÑи. Ðдна пÑовеÑка на пÑаваÑа вÑÑÑе в ÑамаÑа команда за копиÑане обаÑе не може да бÑде заобиколена.
Ðа докÑменÑи, коиÑо изиÑÐºÐ²Ð°Ñ Ð¿Ð¾ÑÑебиÑелÑка паÑола, задайÑе ÑвойÑÑвоÑо Password пÑеди Active := True и Ñе оÑнаÑÑйÑе кÑм ÑÑойноÑÑÑа каÑо кÑм Ñайна: извлиÑайÑе Ñ Ð¾Ñ Ð²Ð°ÑеÑо Ñ
ÑанилиÑе за иденÑиÑикаÑионни данни за вÑÑка ÑеÑиÑ, дÑÑжÑе Ñ Ð´Ð°Ð»ÐµÑ Ð¾Ñ Ð»Ð¾Ð³Ð¾Ð²Ðµ и оÑÑеÑи за ÑÑивове и никога не Ñ Ð·Ð°Ð¿Ð°Ð·Ð²Ð°Ð¹Ñе до ÑÐ°Ð¼Ð¸Ñ Ð´Ð¾ÐºÑменÑ. Ðанел за пÑедваÑиÑелен пÑеглед, койÑо кеÑиÑа паÑоли âзÐ?ÑдобÑÑвоâ? ÑиÑ
омÑлком Ñе пÑевÑÑÑа в база данни за паÑоли без ÑÑоÑвеÑниÑе заÑиÑи.
ÐеÑаÑÑÑ Ð·Ð°ÑлÑжава ÑобÑÑвено ÑеÑение, а не пÑоÑÑо да наÑледÑва пÑавилоÑо за копиÑане на ÑÑдÑÑжание. ФизиÑеÑкоÑо ÑазпеÑаÑване по деÑиниÑÐ¸Ñ Ð½Ðµ подлежи на леÑен одиÑ, но пÑлнаÑа Ð¼Ñ Ð·Ð°Ð±Ñана ÑеÑÑо каÑа поÑÑебиÑелиÑе да пÑавÑÑ ÐµÐºÑанни Ñнимки (screenshots), коеÑо е по-лоÑо по вÑиÑки показаÑели. ЧеÑÑо използван ÑÑеден ваÑÐ¸Ð°Ð½Ñ Ðµ да Ñе позволи пеÑаÑÑÑ, но вÑÑка ÑÑÑаниÑа да Ñе подпеÑаÑва Ñ Ð¸Ð´ÐµÐ½ÑиÑноÑÑÑа на поÑÑебиÑÐµÐ»Ñ Ð¸ вÑемеви пеÑаÑ, коеÑо Ñе налага вÑÑÑе в ÑамаÑа команда за пеÑаÑ. ÐмайÑе Ñеални оÑакваниÑ: водниÑÑ Ð·Ð½Ð°Ðº е ÑÑедÑÑво за вÑзпиÑане и пÑоÑледÑване на авÑоÑÑÑвоÑо. Той не е ÑÐµÑ Ð½Ð¸ÑеÑка заÑиÑа ÑÑеÑÑ ÑазпÑоÑÑÑанение.
Ðакво пÑоÑеÑÑÑ Ð½Ð° Ð²Ñ Ð¾Ð´ÑÑа пÑовеÑка веÑе ÑÑÑбва да ви е казал
ÐанелÑÑ Ð·Ð° пÑедваÑиÑелен пÑеглед взема по-добÑи ÑеÑениÑ, когаÑо ÑайлÑÑ Ð¿ÑиÑÑигне Ñ Ð¿ÑедваÑиÑелно изгоÑвено доÑие: дали е ÑиÑÑован, дали ÑÑдÑÑжа JavaScript, Ð¾Ð¿Ð¸Ñ Ð½Ð° пÑикаÑениÑе Ñайлове и Ñипа на ÑоÑмÑлÑÑа. Този анализ ÑÑÑбва да Ñе извÑÑÑва пÑеди визÑализаÑоÑа, а моделÑÑ Ð² изгÑажданеÑо на ÑабоÑна ÑÑеда за пÑеглед на Ð²Ñ Ð¾Ð´ÑÑи PDF Ñайлове генеÑиÑа ÑоÑно Ñези Ñлагове, коиÑо полиÑикаÑа за пÑеглед ÑÑÑбва да използва. Файлове, коиÑо Ð²Ñ Ð¾Ð´ÑÑаÑа пÑовеÑка е маÑкиÑала каÑо ÑиÑкови, авÑомаÑиÑно Ñе оÑваÑÑÑ Ð¿Ñез заÑиÑÐµÐ½Ð¸Ñ Ð¿ÑÑ, докаÑо ÑÑандаÑÑниÑе докÑменÑи Ð·Ð°Ð¿Ð°Ð·Ð²Ð°Ñ ÑдобÑÑваÑа Ñи. СвÑÑжеÑе дваÑа еÑапа кÑм един Ð¾Ð±Ñ Ð¾Ð±ÐµÐºÑ Ð½Ð° полиÑикаÑа, вмеÑÑо кÑм два оÑделни конÑигÑÑаÑионни екÑана, коиÑо Ñе Ñе ÑÐ°Ð·Ð¼Ð¸Ð½Ð°Ñ Ð¾Ñе пÑи вÑоÑаÑа веÑÑÐ¸Ñ Ð½Ð° ÑоÑÑÑеÑа.
ÐÑде ÑоÑно пÑеминава гÑаниÑаÑа Ð¼ÐµÐ¶Ð´Ñ Ð¸Ð·Ð¿ÑлнениеÑо в ÑамкиÑе на пÑоÑеÑа (in-process) и извÑн него (out-of-process) завиÑи Ð¾Ñ Ñова кой ви изпÑаÑа ÑайловеÑе. Ðа обиÑÐ°Ð¹Ð½Ð¸Ñ Ð²Ñ Ð¾Ð´ÑÑ Ð±Ð¸Ð·Ð½ÐµÑ Ð¿Ð¾Ñок изпÑаÑаÑиÑе на докÑменÑи Ñа извеÑÑни и най-много да Ñа небÑежни. Ð Ñози ÑлÑÑай пÑегледÑÑ Ð² ÑамкиÑе на пÑоÑеÑа Ñ Ð¸Ð·ÐºÐ»ÑÑени ÑкÑипÑове и пÑÐ¸Ñ Ð²Ð°Ð½Ð°Ñи вÑÑзки е пÑиемлива заÑиÑа. Ðа анонимни пÑблиÑни каÑÐ²Ð°Ð½Ð¸Ñ Ñова не е Ñака и никакви наÑÑÑойки на Ñлагове в пÑоÑеÑа нÑма да помогнаÑ. РендиÑайÑе Ñези докÑменÑи в оÑделен пÑоÑÐµÑ Ñ Ð½Ð¸Ñки пÑивилегии и изпÑаÑайÑе биÑмапи кÑм поÑÑебиÑелÑÐºÐ¸Ñ Ð¸Ð½ÑеÑÑейÑ, Ñака Ñе деÑÐµÐºÑ Ð² ÑдÑоÑо да ви коÑÑва Ñамо Ñози пÑоÑеÑ, а не ÑÑлоÑо Ñ Ð¾ÑÑ Ð¿Ñиложение. ÐземеÑе Ñова ÑеÑение ÑÑзнаÑелно и клаÑиÑиÑиÑайÑе вÑеки Ð²Ñ Ð¾Ð´ÑÑ ÐºÐ°Ð½Ð°Ð», ÑÑй каÑо ÑенаÑа на гÑеÑнаÑа пÑеÑенка е ÑвÑÑде виÑока.
ÐиÑензиÑанеÑо, ÑвÑÑзаниÑÑ ÑÑÑ ÑигÑÑноÑÑÑа API и демонÑÑÑаÑиÑÑа на заÑиÑен визÑализаÑÐ¾Ñ Ñа доÑÑÑпни на пÑодÑкÑоваÑа ÑÑÑаниÑа: PDFium Component.