2010-03-18 9 views
7

पर किसी फ़ॉर्म में http दर्ज करने वाले स्पैमर को कैसे रोकें मेरे पास एक ऐसा फॉर्म है जो डेटाबेस तालिका में जानकारी भेजता है। मैंने इसे जावास्क्रिप्ट के साथ चेक किया है लेकिन जावास्क्रिप्ट बंद होने पर स्पैमर को http में प्रवेश करने और PHP के साथ डेटाबेस में रोकने का सबसे अच्छा तरीका क्या है?डेटाबेस

उत्तर

6

आप प्रपत्र पर कोई कैप्चा को लागू कर सकते हैं:

http://en.wikipedia.org/wiki/CAPTCHA

संपादित: इसके अलावा निश्चित रूप से सर्वर साइड पर प्रपत्र डेटा को सत्यापित करने और html टैग आदि हमेशा की तरह के लिए जाँच, लेकिन कॅप्चा के खिलाफ की मदद करनी चाहिए स्वचालित स्पैम हमले।

+2

सरल बॉट्स के खिलाफ कैप्चा का काम, लेकिन अगर कोई वास्तव में चाहता है तो उन्हें दूर किया जा सकता है। हाल ही में यह पता चला था कि संगीत कार्यक्रमों में टिकट बेचने वाली एक लोकप्रिय साइट सेकंड में बिक रही थी क्योंकि प्रत्येक खरीद के लिए आवश्यक कैप्चा होने के बावजूद बॉट्स का एक समूह पुनर्विक्रय बाजार के लिए सभी बेहतरीन सीटों को उठा रहा था। – tloach

+0

यह बुरी खबर है। क्या इसे रोकने के लिए जोड़ने के लिए कोई आसान PHP कोड है? – frapet

+0

सबकुछ 'जाली', एक तरफ या दूसरे हो सकता है। लेकिन इससे बचने के लिए कोई आसान तरीका नहीं है। आपको खतरे के लिए पर्याप्त सुरक्षा उपायों को लागू करना चाहिए। ज्यादातर मामलों में, अच्छा कैप्चा पर्याप्त से अधिक है (सर्वर सत्यापन के साथ)। –

2

विचार करने के लिए दो चीजें हैं जिन्हें समांतर में लागू किया जाना चाहिए (शायद और भी है)।

  1. कैप्चा (जैसा कि पहले उल्लेख किया है)
  2. सर्वर साइड पर अपने डेटा सत्यापित करें! आपने लिखा है कि आप इसे जावास्क्रिप्ट द्वारा करते हैं। यह अच्छा है, लेकिन PHP में एक ही सत्यापन प्रक्रिया लिखी जानी चाहिए।

ठीक है, कैप्चा के लिए आपको सर्वर पक्ष पर यह सत्यापन करना होगा। लेकिन भले ही आप कैप्चा को लागू न करने का निर्णय लेते हैं, आपको सर्वर पक्ष पर डेटा सत्यापन करना चाहिए।

3

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

 
if (strpos('http://', $_POST['message']) !== false) { /* refuse */ } 
3

आप CSRF protection उपयोग कर सकते हैं स्पैमर्स को रोकने के लिए, मैं इसे काफी प्रभावी पाया है। एक छिपी हुई फ़ील्ड है कि कभी नहीं सामग्री के साथ प्रस्तुत किया जाना चाहिए -

What it is और how it works

एक और डरपोक विधि एक "Honeypot" क्षेत्र में शामिल करने के लिए है। यदि यह भरा हुआ है, तो आप जानते हैं कि यह स्पैम है। इन तरीकों में से कोई भी एक कष्टप्रद कैप्चा की आवश्यकता नहीं है।

+1

दरअसल, एक कैप्चा एक प्रकार का सीएसआरएफ सुरक्षा है। – BalusC

+0

सीएसआरएफ का उपयोग सभी प्रकार की बुरी चीजों के लिए किया जाता है, हालांकि स्पैमिंग फॉर्म आमतौर पर उनमें से एक नहीं होते हैं। सीएसआरएफ अनधिकृत कार्यों को करने के लिए किसी और की मंजूरी/प्राधिकरण का उपयोग करने के बारे में है। – Jacco

+0

@ बाल्लूसी बहुत सच – Andy

0

मैं आपके सम्मिलित करने से पहले htmlentities() फ़ंक्शन का उपयोग करने का सुझाव देता हूं।

स्पष्ट रूप से डेटाबेस के साथ संवाद करने के लिए parametrized queries का उपयोग करके आपकी डालने की जानी चाहिए। कैप्चा निश्चित रूप से एक विकल्प है, लेकिन यह को कितनी बार को पोस्ट कर सकता है, वे पोस्ट कर सकते हैं। उपयोगकर्ता को उन चीजों को इनपुट करने से रोकने के लिए एचएमटीएल एस्केपिंग (दोबारा, htmlentities() फ़ंक्शन) का उपयोग करें।