2011-07-26 15 views
6

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

मेरा सवाल है, क्या इसके परिणामस्वरूप सीपीयू उपयोग जोड़ा जाएगा और इस प्रकार मेरी साइट को किसी भी तरह मार डालेगा अगर हमलावर देरी के दौरान नए उदाहरण खोलता रहता है? या नींद() कमांड न्यूनतम CPU/स्मृति का उपयोग करता है और एक छोटी लिपि पर बोझ नहीं होगा। मैं उनसे इनकार करने की इच्छा नहीं करता क्योंकि मैं उन्हें स्पष्ट रूप से सीमा के बारे में नहीं जानता, बल्कि यह सुनना चाहता हूं कि मुझे क्यों चाहिए।

[कृपया एक छोटी साइट पर आईपी अपमानजनक क्यों मानते हैं, इस बारे में कोई चर्चा नहीं है, क्यों मैंने हाल ही में एक स्क्रिप्ट बनाई है कि curl का एक पृष्ठ & उपयोगकर्ता को जानकारी देता है और मैंने देखा कि कुछ आईपी की मेरी बेवकूफ छोटी लिपि । कभी-कभी कर्कलिंग अक्सर मेरे परिणामों को सर्वर आईएम मतदान से अनुपयोगी प्रस्तुत करता है और वैध उपयोगकर्ता अपने परिणामों से बाहर निकलते हैं। ]

+0

यदि संभव हो तो मैं उन्हें उच्च स्तर पर प्रतिबंधित करने के साथ जाऊंगा (= कम संसाधन उपयोग), [serverfault पर यह प्रश्न] (http://serverfault.com/questions/ 287851/रोक-हथौड़ा-स्क्रिप्ट-पार्सर्स) उपयुक्त लगता है। – Wrikken

+0

@Wrikken, यह एक segfault सवाल नहीं है, क्योंकि ओपी पूछ रहा है कि अपमानजनक उपयोगकर्ताओं के खिलाफ रक्षात्मक तरीके से कोड कैसे करें। – Soren

+1

जेफ एटवुड इस बारे में कुछ नहीं लिखते थे? इसे नरकबैनिंग या लैगबैनिंग या कुछ कहा जाता था। मुझे यह जानने में दिलचस्पी होगी कि वह इसे लागू करने की योजना बना रहा था अगर वह निर्णय लेने के बिना सिस्टम को गड़बड़ कर बेजिलियन सोने के धागे के बिना निर्णय लेता था। –

उत्तर

5

नींद किसी भी सीपीयू या मेमोरी का उपयोग नहीं करती है जो पहले से ही कॉल स्वीकार करने की प्रक्रिया द्वारा उपयोग नहीं की जाती है।

नींद को लागू करने के साथ आपको जिस समस्या का सामना करना पड़ेगा() यह है कि आप अंततः फाइल डिस्क्रिप्टर से बाहर हो जाएंगे जबकि हमलावर साइट आपकी नींद के समय के लिए प्रतीक्षा कर रही है, और फिर आपकी साइट किसी अन्य लोगों के लिए नीचे दिखाई देगी जो कनेक्ट करने की कोशिश करता है।

यह एक शास्त्रीय DDoS परिदृश्य है - हमलावर वास्तव में (वे भी ऐसा करने की कोशिश कर सकते हैं, लेकिन यह एक अलग storry है) के बजाय वे उपयोग करके अपनी साइट को नुकसान पहुँचाने की कोशिश कर रहे हैं अपने मशीन में तोड़ने की कोशिश नहीं करते आपके पास प्रत्येक संसाधन है, या तो बैंडविड्थ, फ़ाइल डिस्क्रिप्टर, प्रसंस्करण के लिए थ्रेड आदि - और जब आपके संसाधनों में से एक का उपयोग किया जाता है, तो आप साइट डाउन प्रतीत होती है हालांकि आपका सर्वर वास्तव में नीचे नहीं है।

यहां केवल वास्तविक रक्षा कॉल को स्वीकार नहीं करना है, या एक गतिशील फ़ायरवॉल कॉन्फ़िगरेशन है जो कॉल को फ़िल्टर करता है - या राउटर/फ़ायरवॉल बॉक्स जो आपके सर्वर से बाहर करता है।

5

मुझे लगता है कि इस मुद्दे के साथ यह मुद्दा होगा कि आप संभावित रूप से प्रणाली के चारों ओर बिछाने वाले सोने की बड़ी संख्या में हो सकते हैं। यदि आप अपने दुर्व्यवहार का पता लगाते हैं, तो तुरंत एक त्रुटि भेजें और इसके साथ किया जाए।

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

5

नींद() एक ऐसा कार्य है जो विशिष्ट समय के लिए निष्पादन "ब्लॉक" करता है।

while (x<1000000); 

कि के रूप में 100% CPU उपयोग का कारण होता है: यह के बराबर नहीं है। यह प्रक्रिया को ऑपरेटिंग सिस्टम में "अवरुद्ध" स्थिति में डाल देता है और फिर टाइमर ऊपर होने के बाद प्रक्रिया को "तैयार" स्थिति में वापस रखता है।

ध्यान रखें, हालांकि, PHP में 30-सेकंड का टाइमआउट डिफ़ॉल्ट है। मुझे यकीन नहीं है कि "स्लीप()" उस के अनुरूप है या नहीं (मुझे संदेह है कि यह स्क्रिप्ट के बजाय सिस्टम कॉल के बाद से संदेह करेगा)

आपका होस्ट आपको इतनी सारी "अवरुद्ध" प्रक्रियाएं पसंद नहीं कर सकता है, इसलिए हो उस से सावधान रहें।

संपादित करें: Does sleep time count for execution time limit? के अनुसार, ऐसा लगता है कि "नींद()" "अधिकतम निष्पादन समय" (लिनक्स के तहत) से प्रभावित नहीं है, जैसा कि मैंने अपेक्षा की थी। जाहिर है यह विंडोज के तहत करता है।

1

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

मेरी प्रमाणीकरण स्क्रिप्ट ने एटवुड के नरक प्रतिबंध विचार के समान कुछ बनाया। सत्र आईडी को रैम में पकड़ा गया था और प्रत्येक पृष्ठ कॉल पर घुमाया गया था। यदि शर्तों को पूरा नहीं किया गया था, तो मैं उस विशेष सत्र को डेमेटिट के साथ ध्वजांकित करूंगा। तीन के बाद, मैंने अपने निष्पादन में नींद() कॉल जोड़ना शुरू कर दिया। सीमा परिवर्तनीय थी, लेकिन मैं एक खुश संख्या के रूप में 3 सेकंड पर बस गया।

प्रमाणीकरण के साथ, हमलावर हमला करने के दौरान अपने मूल्य के लायक बनाने के लिए प्रति सेकंड कुछ निश्चित प्रयास करने पर निर्भर करता है। यदि यह उनका केंद्र बिंदु है, तो नींद शुरू करने से प्रणाली वास्तव में धीमी दिखती है, जो मेरी राय में हमला करने के लिए कम वांछनीय बनाती है।

यदि आप उन्हें बताए बिना फ्लैट के बजाय उन्हें धीमा करते हैं, तो आप कम आकर्षक दिखने का थोड़ा अधिक उचित मौका खड़े हैं।

कहा जा रहा है कि यह एक "प्रकार" obfuscation के माध्यम से सुरक्षा है, तो आप वास्तव में बहुत अधिक भरोसा नहीं कर सकते हैं। यह मेरी समग्र नुस्खा में एक और कारक है :)

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

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