हर डिलीट किए गए HTML पेज में HTML कोड कैसे इंजेक्ट करें?


23

मुझे एक Apache web serverऐसा स्टेटिक मिला है जो स्टैटिक HTML पेज डिलीट करता है। किसी कारण से मैं फ़ाइलों को खुद नहीं बदल सकता, लेकिन मैं अभी भी हर पृष्ठ पर कुछ HTML को इंजेक्ट करना चाहता हूं जो सेवा की जा रही है।

क्या यह संभव है mod_proxy? यदि नहीं, तो क्या कोई ऐसा सॉफ्टवेयर सुझा सकता है जो इस तरह की सुविधा प्रदान करता हो?

संपादित करें: मुझे किसी प्रकार का बैनर विज्ञापन (जैसे javascript) और ट्रैकिंग पिक्सेल सम्मिलित करना होगा ।

जवाबों:


18

आप ऐसा कर सकते हैं: अनुरोध बदलने के लिए mod_rewrite के साथ काम करें

/some/static/page.html

सेवा मेरे

/htmlinjector.php?url=/some/static/page.html

फिर फाइल-मैनिपुलेशन करने के लिए PHP (या जो भी आपको उचित लगे) का उपयोग करें। प्रदर्शन में सुधार के लिए आउटपुट कैश जोड़ें।

एक विकल्प के रूप में, अपाचे हैंडलर्स ध्वनि सहायक हैं:

CGI स्क्रिप्ट का उपयोग करके स्थिर सामग्री को संशोधित करना

निम्नलिखित निर्देश CGI स्क्रिप्ट html के लॉन्च को ट्रिगर करने के लिए एक्सटेंशन के साथ फ़ाइलों के लिए अनुरोध का कारण footer.plबनेंगे।

Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html

तब सीजीआई स्क्रिप्ट मूल रूप से अनुरोधित दस्तावेज ( PATH_TRANSLATEDपर्यावरण चर द्वारा इंगित ) भेजने और जो कुछ भी संशोधन या परिवर्धन वांछित हैं , उसके लिए जिम्मेदार है ।

यह कम या ज्यादा है जो mod_rewrite दृष्टिकोण को कम हैकरी के साथ ही करेगा।


क्या कोई mod_rewrite समाधान का उदाहरण दे सकता है? (विशेष रूप से htmlinjector.php की सामग्री)
Asaf

1
आप में से जो लोग इससे जूझ रहे हैं - के लिए मत भूलना ScriptAliasऔर आदि <Directory /some/static/>...</Directory>, <Directory /path/to/cgi-bin/> Options +ExecCGI</Directory>मैं उपयोगकर्ता के जवाब के साथ छेड़छाड़ नहीं करना चाहता, लेकिन यदि आप अनुरोध करते हैं, तो मैं अधिक जानकारी दूंगा।
श्रीधर सरनोबत

@asdf उदाहरण: <?php ob_start(); include("/some/static/page.html"); $contents = ob_get_contents(); ob_end_clean(); echo str_replace('</head>', '<script async>Some script content goes here like adsense code</script></head>', $contents) ?>पेज की बाकी सामग्री को लोड करने के लिए $ सामग्री का उपयोग करें। आप इस फ़ाइल को htmlinjector.php या जो कुछ भी कह सकते हैं और अपने htaccess फ़ाइल में इस तरह से सेव कर सकते हैं:Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} /some/static/page.html RewriteRule ^(.*)$ /htmlinjector.php?url=/some/static/page.html
गेब्रियल 16

20

मुझे यकीन नहीं है कि उत्तर की सूची में इसका उल्लेख क्यों नहीं किया गया है। क्षमा करें यदि इस प्रश्न को देखने में मुझे 2 वर्ष लगे ...

सबसे आसान, सबसे शक्तिशाली तरीका है कि आप जो करना चाहते हैं वह अपाचे फिल्टर का उपयोग कर रहे हैं ।

बस ले लो:

ExtFilterDefine css_changer mode=output intype=text/html cmd="/some/php/script.php"
SetOutputFilter css_changer

एक संभावित स्क्रिप्ट:

#!/usr/bin/php
<?

#phpinfo(); // Uncomment to see ALL env variables
$host = $_ENV["HTTP_HOST"]; // www.site.com
$script_name = $_ENV["SCRIPT_NAME"]; // /theme/green/style.css
$pi = pathinfo($script_name);
$type = $pi['extension'];
#print "$host $script  $type";

$stdin = STDIN;

while($line = fgets($stdin)){
  $line = preg_replace('/a/', 'A', $line);

  fwrite(STDOUT, $line);
}
fclose(STDOUT);
?>

यह सभी "ए" को "ए" एस में बदल देगा।

इस तरह से अपने httpd.conf में फ़िल्टर को सक्षम करना सुनिश्चित करें:

LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so

यह प्रश्न Google में वास्तव में ऊपर है और मंचों के संदर्भ में बहुत अधिक नहीं है


1
यह अब तक का सबसे अच्छा समाधान है, मैं इसी तरह की समस्या का पता लगाने में सक्षम था। साझा करने के लिए बहुत धन्यवाद!
हराल्ड १

4

वेबपृष्ठ (सामग्री) पर लिंक को संपादित करने के लिए mod_proxy_html का उपयोग करने का तरीका यहां एक ट्यूटोरियल है । आप इसे अपने इच्छित html को संशोधित करने में सक्षम कर सकते हैं।

अद्यतन: क्या आप वाकई इस मार्ग पर जाना चाहते हैं? मुझे लगता है कि अपाचे सामग्री की सेवा करने के लिए है, इसे बनाने के लिए नहीं। यह संभवत: एक एमवीसी ढांचे के दृश्य भाग में जाएगा। इसका कारण यह है कि मैं यह अनुशंसा नहीं करूंगा कि आप प्रतिरूपकता के नियम को तोड़ रहे हैं । आपके वेब एप्लिकेशन को उस एप्लिकेशन के साथ इंटरव्यू किया जाएगा जो इसे सर्वर करता है, भविष्य के उन्नयन, चाल आदि को जटिल बनाता है।


हम्म, अगर मुझे यह सही मिल जाए तो mod_proxy_html पूरा नया कोड स्निपेट जोड़ने में सक्षम नहीं है?
नोड

यकीन नहीं होता, अब जब आपने और जोड़ लिया है, कमांडर तोमलक का जवाब बेहतर लगता है। आप हैकरी की भूमि में हैं जो मैं कहूंगा कि वेब पेज बनाना वास्तव में अपाचे के लिए नहीं है, यह सामग्री की सेवा के लिए है।
काइल ब्रान्ड

मैंने सोचा कि शायद कुछ प्रकार के स्टैंडअलोन प्रॉक्सी हैं जो HTML पृष्ठों को फिर से लिख सकते हैं। MySQL के लिए MySQL प्रॉक्सी जैसा कुछ। हो सकता है कि प्रिविक्सी ऐसा कर सके।
नोड

@ कैल ब्रांड: LOL - मुझे लगता है कि सैन्य रैंक का उल्लेख आधिकारिक तौर पर आपको एक ट्रेकी बनाता है। इससे आज मेरा काम बन गया। :)
टॉमालक जूल 27'09

4

मैं mod_rewrite और SSI के साथ ऐसा करना पसंद करूंगा।

सबसे पहले एक वातावरण चर में पथ रखो

रीराइट्रॉन्ड% {IS_SUBREQ} गलत
RewriteRule ^ (/.* \। Html) / page.shtml [E: फ़ाइल नाम: $ 1]

फिर shtml फ़ाइल में प्रक्रिया करें

<! - # वर्चुअल = "$ फ़ाइलनाम" शामिल करें ->

(इस समाधान के कुछ भाग स्टैकओवरफ्लो प्रश्न पर आधारित हैं। /programming/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )


1
इसके लिए shtml का उपयोग करने का मेरा मुख्य कारण यह होगा कि प्रत्येक अनुरोध के लिए बाहरी CGI को कॉल करने से लोड की समस्या हो सकती है।
एलेक्स लेहमैन

4

mod_sed यहां एक अच्छा फिट है। आप एक आउटपुट फ़िल्टर बना सकते हैं, जो समापन सिर या बॉडी टैग से मेल खाता है, उदाहरण के लिए, और इससे पहले अपना html डालें।


1

क्या कोई mod_perl मॉड्यूल किसी काम का होगा?

http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm

जो आप चाहते हैं या कर सकते हैं, कम से कम, आपको सही दिशा में इंगित करें।


Thx, मेरे पास एक नज़र होगी, फिलहाल हम एक कस्टम पाद लेख के साथ httpd.apache.org/docs/2.0/handler.html का उपयोग करते हैं।
Node

1

आप कुछ मापदंड या नियमित अभिव्यक्ति का उपयोग करके html को आउटगोइंग प्रतिक्रियाओं में इंजेक्ट करने के लिए Apache mod_substitute का उपयोग कर सकते हैं। इसे कैसे प्राप्त किया जाए, इसका विवरण यहां दिया जा रहा है।


1

आप नीचे दिए गए निर्देशों का उपयोग करके अपाचे के हेडर और फुटर निर्देश में देख सकते हैं।

<Directory "/usr/local/www/data/scott">
    Options +Indexes
    AllowOverride All
    AddOutputFilter LAYOUT html htm shtml
    LayoutComment On
    LayoutHeader /wrappers/scott-header.html
    LayoutFooter /wrappers/scott-footer.html
</Directory>

अधिक पढ़ने यहाँ है: http://wannabe.guru.org/scott/hobbies/apache/


1

मॉड लेआउट अब अप्रचलित है और यदि आप एक बाहरी स्क्रिप्ट को कॉल करने का ओवरहेड नहीं चाहते हैं, तो सबसे अच्छा समाधान जो मेरे लिए काम करता है वह था मॉड सेड । आप doc (1s) की पहली पंक्ति से मेल करने के लिए mod sed का उपयोग कर सकते हैं और वहां हेडर स्क्रिप्ट कोड जोड़ सकते हैं और अंतिम पंक्ति ($ s) से मिलान कर सकते हैं और वहां पाद लेख डाल सकते हैं।

Options Indexes FollowSymLinks Includes ExecCGI
Order Deny,Allow
Deny from none
Allow from all
Require all granted

AddOutputFilter Sed html
SetOutputFilter Sed;DEFLATE
OutputSed "1s|^|<header code>|"
OutputSed "$s|$|</footer code>|g"

0

मैं अपाचे के माध्यम से सभी पृष्ठों पर html सम्मिलित कर सकता हूं, लेकिन केवल उस साइट के लिए जो मेरे अपाचे द्वारा होस्ट की गई है, न कि सभी साइट हालांकि मेरे अपाचे प्रॉक्सी सर्वर।

यह है कि यह कैसे काम करता है। मैं एक XAMPP सेट अप, Apache 2.4 के लिए mod_layout 5.1 डाउनलोड करता हूं। (स्थापित करें mod_layout सरल है, यदि आप विंडोज़ के लिए XAMPP का उपयोग करते हैं, तो बस windows के लिए mod_layout.so 5.1 डाउनलोड करें और इसे अपने अपाचे मॉड्यूल फ़ोल्डर $ home / apache / मॉड्यूल में डालें, फिर अपने DSD .conf LoadModule Layout_module मॉड्यूल / के लिए config DSO जोड़ें mod_layout.so - यदि आप linux या अन्य os का उपयोग कर रहे हैं, तो आपको linux के लिए mod_layout.so डाउनलोड करना चाहिए, फिर रन बनाने के लिए कमांड बनाएं)

विंडोज़ के लिए mod_layout.so स्थापित करने के बाद, बस इस कोड को अपनी .htaccess फ़ाइल या httpd.conf पर रखें, आपके HTML को आपके सभी पृष्ठ पर सम्मिलित कर दिया जाएगा:

<IfModule mod_layout.c>
AddOutputFilter LAYOUT html 
AddOutputFilter LAYOUT htm 
AddOutputFilter LAYOUT shtml 
AddOutputFilter LAYOUT shtm 
AddOutputFilter LAYOUT cgi 
AddOutputFilter LAYOUT php 
LayoutFooter "C:/xampp/apache/cgi-bin/footer.php"
</IfModule>

C: /xampp/apache/cgi-bin/footer.php वह जगह है जहाँ आप अपनी html या php फ़ाइल डालते हैं, मेरी स्थिति में C: /xampp/apache/cgi-bin/footer.php है, लेकिन आप इसे किसी भी स्थान पर रख सकते हैं। , बस सही रास्ता दे दो, तुम ठीक हो जाओगे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.