2011-04-05 9 views
30

हमारे पास एक ऐसी वेबसाइट है जो डाउनलोड के लिए कई पीडीएफ उपलब्ध कराता है। पीडीएफ स्थिर, या गतिशील रूप से उत्पन्न हो सकता है। वे कई तंत्रों में से एक का उपयोग कर डाउनलोड किए जाते हैं (स्थिर-यूआरएल, पोस्ट बैक/रीडायरेक्ट/मेटा-रीफ्रेश/आदि)। कुछ पीडीएफ फाइलों के लिए, क्रोम बिना किसी शिकायत के डाउनलोड करता है। दूसरों के लिए, यह उपयोगकर्ता को चेतावनी देता है कि "इस प्रकार की फ़ाइल आपके कंप्यूटर को नुकसान पहुंचा सकती है। क्या आप वाकई डाउनलोड करना चाहते हैं ..." और एक अतिरिक्त क्लिक की आवश्यकता है।Google क्रोम कभी-कभी चेतावनी देता है कि एक डाउनलोड किया गया पीडीएफ आपके कंप्यूटर को नुकसान पहुंचा सकता है?

संदेश दिखाने के लिए क्रोम का उपयोग करने के लिए क्रोम क्या जानकारी है? जाहिर है, यह केवल तथ्य नहीं है कि फ़ाइल एक पीडीएफ है।

स्पष्ट होने के लिए, संदेश को कभी भी दिखने से रोकने के लिए, मैं सर्वर पक्ष पर कुछ करना चाहता हूं (यदि यह मायने रखता है तो हम आईआईएस/एएसपी.नेट का उपयोग करते हैं)। मुझे ऐसे समाधान में रूचि नहीं है जिसमें प्रत्येक उपयोगकर्ता अपने ब्राउज़र में संदेश अक्षम कर लेता है (यदि यह भी संभव है)।

धन्यवाद।

उत्तर

22

टी एल; डॉ: क्रोम एक फाइल की सुरक्षा का निर्धारण किया जाता क्लाइंट साइड heuristics की एक किस्म है। मुझे विश्वास नहीं है कि आप पर कुछ भी कर सकते हैं सुनिश्चित करें कि एक फ़ाइल को "सुरक्षित" चिह्नित किया गया है, लेकिन मैं कुछ चीजों को इंगित करूंगा जो मदद कर सकते हैं।


एक अच्छी मात्रा में तर्क यह निर्धारित करने में चला जाता है कि यह संकेत दिखाया जाना चाहिए या नहीं। खुशी से, क्रोमियम ओपन सोर्स है, ताकि आपके लिए तर्क आपके लिए उपलब्ध हो। मैं डाउनलोड कोड से अविश्वसनीय रूप से परिचित नहीं हूं, लेकिन शुरू करने के लिए सबसे अच्छी जगह लगभग निश्चित रूप से ChromeDownloadManagerDelegate::IsDangerousFile होगी। यह download_util::GetFileDangerLevel और download_util::IsExecutableMimeType पर कॉल करने के लिए समाप्त होता है, जहां ऐसा लगता है कि माइम प्रकारों और पथों के खिलाफ चेक रहते हैं।

एक त्वरित पढ़ने के आधार पर, मुझे लगता है कि रीडायरेक्ट कम से कम कारण का हिस्सा हैं, क्योंकि वे सीधे उपयोगकर्ता संकेत से संबंधित नहीं हैं। डाउनलोड के माध्यम से सीधे क्लिक करना इस संदर्भ में कुछ पर क्लिक करने से पहले "सुरक्षित" है, और विभिन्न ट्रैकर्स और प्रेषक के माध्यम से रीडायरेक्ट किया जा रहा है, क्योंकि उपयोगकर्ता को साथ आने की उम्मीद नहीं की जा सकती है।

हेरिस्टिक यह भी ध्यान में रखता है कि आप पहले किसी विशेष URL या डोमेन पर हैं या नहीं; जो "सुरक्षित" और दूसरों के रूप में दिखाई देने वाली कुछ फ़ाइलों पर भी प्रभाव डाल सकता है।

+0

मैंने देखा है कि इस संदेश के कुछ कारण हो सकते हैं: 1) फ़ाइल नामों में रिक्त स्थान और 2) एक्सटेंशन को पूंजीकृत किया जा रहा है। मैंने उन दो समस्याओं को ठीक करने के बाद, चेतावनी चली गई (मेरे आवेदन के लिए)। – SyntaxRules

0

मुझे लगता है कि क्रोम शायद गतिशील रूप से जेनरेट किए गए पीडीएफ पर आपको चेतावनी दे रहा है, हालांकि पूरी तरह से सुनिश्चित नहीं है।

इसका कारण यह है कि पीडीएफ को निष्पादन योग्य कोड रखने के लिए बनाया जा सकता है जिसे पाठक खोलने पर छेद (बफर ओवरफ्लो या कुछ ऐसे शोषक छेद) होने पर निष्पादित किया जा सकता है। पीडीएफ की तरह टूल्स द्वारा उत्पन्न होते हैं, जहां आप निर्दिष्ट करते हैं कि कौन सा कोड एम्बेड करना है आदि, और यही वह जगह है जहां मेरा संदेह आता है कि गतिशील रूप से जेनरेट की गई फाइलें उस संदेश बॉक्स का कारण बन रही हैं।

0

मुझे यकीन है कि के लिए पता नहीं है, लेकिन मेरे अनुमान कर रहे हैं:

  1. सर्वर फ़ाइल (यानी "परीक्षण/html" के बदले "आवेदन/x-पीडीएफ") के लिए गलत सामग्री प्रकार रिटर्न । कुछ हैक की गई साइटें आपको स्क्रीन कंबल (* .scr) भेजने की कोशिश करती हैं जो आपको बताती है "यह pr0n है! इसे अभी खोलें!"। फ़ाइल पर डबल क्लिक करने से आपके कंप्यूटर पर वायरस इंस्टॉल हो जाएगा।

  2. पीडीएफ में जावास्क्रिप्ट, संभवतः एन्क्रिप्टेड जावास्क्रिप्ट होता है।

3

आप की कोशिश कर सकते content-disposition: inline बजाय content-disposition: attachment (http://code.google.com/p/chromium/issues/detail?id=65895 देखें)

+0

अच्छा खोज। ऐसा लगता है कि ऑटो-ओपन व्यवहार वास्तव में क्रोम 13 में रीग्र्रेस किया गया है, और क्रोम 15 में तय किया जाएगा: http://crbug.com/92345 यह केवल उन उपयोगकर्ताओं को प्रभावित करता है जिन्होंने कुछ विशिष्ट प्रोग्राम में स्वतः खोलने के लिए पीडीएफ फाइलें सेट की हैं, लेकिन यह ओपी के उपयोग-मामले के अनुरूप हो सकता है। –

2

http://productforums.google.com/d/msg/chrome/h0nzjkvxTZU/nciM-x97fEAJ

मैं इसे से छुटकारा पाने के :-)

पहचान
पहले परीक्षण किया कंसोल में पीडीएफ खोलने पर कामयाब रहे। मैंने एक टाइमआउट भी कोशिश की जिसने मदद नहीं की, लेकिन उसने मुझे पहली बार एक संदेश दिया (यह साइट एकाधिक फाइलें डाउनलोड करने का प्रयास कर रही है। क्या आप इसे अनुमति देना चाहते हैं?)।

setTimeout(function(){ /* export */ }, 0); 

समाधान
क्या करता है मेरे लिए काम सीधे एक क्लिक करें घटना के लिए देते है।

document.getElementById("expButton").addEventListener("click", function() { /* exp.. */ }); 

मुझे लगता है कि शुद्ध जावास्क्रिप्ट निर्यात वास्तविक घटनाओं के रूप में ही काम नहीं करते, शायद आप ठीक ढंग से एक घटना आरंभ कर सकता है, पहले .. मैं वर्तमान में प्रयास करने के लिए नहीं कर रहा हूँ।

पेज। मैंने जांच नहीं की है (सेटिंग्स/डाउनलोड) 'डाउनलोड करने से पहले प्रत्येक फाइल को कहां से सहेजना है' पूछें, लेकिन किसी भी तरह से यह ठीक है।


सिर्फ इसलिए कि यह उपयोगी हो सकता है:
मैं ReportViewer का इस्तेमाल किया और यह एक निर्यात समारोह था। अगर मैं इसे क्लिक करें यह ठीक काम करता है, लेकिन मैं जब मैं अपने कस्टम DIV क्लिक किया निर्यात करने के लिए चाहता था:

Sys.Application._components.ReportViewerRoot.exportReport(format) 

मैं सांत्वना के माध्यम से इसे लागू करने की कोशिश की और कुछ भी नहीं नेत्रहीन हो रहा था, जब तक आप डाउनलोड पृष्ठ खोलने (Ctrl-जम्मू):

pure js invocation

तब मैंने पहले उल्लेख किया टाइमआउट के साथ यह कोशिश की, लेकिन फिर से अवांछित व्यवहार: pure JS with timeout

तो मैं एक वास्तविक क्लिक करें, के लिए देते करने की कोशिश की जो वास्तव में नीचे दी गई 2 अलग-अलग परिस्थितियों में, जिसके बारे में मैं समझा नहीं सकता या आगे की जांच नहीं कर सकता।

document.getElementById("myDIV").addEventListener(
    "click", 
    function() { 
     Sys.Application._components.ReportViewerRoot.exportReport("PDF"); 
    } 
); 

अजीब weird

वांछित success


और मैं सोच रहा हूँ अगर आप वास्तव में घटनाओं के साथ इस अनुकरण कर सकते हैं। मैंने सरल जेएस ईवेंट बनाने की कोशिश की है, लेकिन यह काम नहीं किया।

+0

मुझे पता है कि यह पुराना है, लेकिन मुझे लगता है कि अगर किसी ने कोशिश की तो वे वास्तविक चित्रों और नामों को प्राप्त करने के लिए आपकी छवियों को आसानी से डी-फ़ज़ कर सकते हैं। – sricks

-4

असल में अगर आप घटनाओं यह हमेशा यदि आप एक सरल लिंक() आपको लगता है कि जांच से बच सकते हैं programm होने जा रहा का उपयोग करें और आप अपने स्वत: डाउनलोड

2

मैं क्रोम में एक ऐसी ही समस्या में आए मिल सकती है।

मेरी साइट ने कुछ डेटा के साथ एक पीडीएफ दस्तावेज़ भर दिया और उपयोगकर्ता को सहेजने के लिए उस पीडीएफ को वापस कर दिया।

पेज अनुलग्नक के रूप में उत्पन्न पीडीएफ दस्तावेज़ लौटे:

Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=" + aOutputFileName); 
Response.TransmitFile(aFilePath); 
Response.End(); 

पीडीएफ डाउनलोड के लिए लिंक एक target = "_ blank" विशेषता परिभाषित किया था:

<a href="CreatePdf.aspx" target="_blank">Your pdf</a> 

निकाला जा रहा है लिंक लिंक से विशेषता ने चेतावनी को भी हटा दिया जब उपयोगकर्ता ने कहा लिंक पर क्लिक किया।

+0

'target =" _ blank "को हटाकर वास्तव में मेरी समस्या हल हो गई :) –

संबंधित मुद्दे