हम एक छोटी सी ऐप में कैप्चा टूल के लिए जेकैप्चा का उपयोग कर रहे हैं कि मेरी टीम लिख रही है। हालांकि, केवल विकास के समय (एक छोटी टीम - हम में से 4) के दौरान, हमने वास्तविक शापों के लिए कई अभिशाप शब्दों और अन्य संभावित आक्रामक शब्दों में भाग लिया है। संभावित आक्रामक शब्दों को फ़िल्टर करने का कोई तरीका है ताकि वे उपयोगकर्ता को प्रस्तुत न हों?क्या Jcaptcha से आक्रामक शब्दों को फ़िल्टर करने का कोई तरीका है?
उत्तर
मैंने जेसीएप्चा डाउनलोड करने और स्रोत को देखने में समय बिताया। मूल रूप से जेकैटचा रीकैप्चा के अलावा वहां प्रत्येक एकल कैप्चा की तरह काम करता है। इसलिए आप क्या चाहते हैं तुच्छ है।
JCaptcha एक WordGenerator है, जो और इंटरफ़ेस का बहुत ही सरल अवधारणा का उपयोग किया जाता है:
public interface WordGenerator {
String getWord(Integer length);
String getWord(Integer length, Locale locale);
}
हमें स्थानीयकरण उपेक्षा करते हैं।
विशिष्ट उपयोग इस तरह है:
WordGenerator words = ...
WordToImage word2image = new SimpleWordToImage();
ImageCaptchaFactory factory = new GimpyFactory(words, word2image);
pixCaptcha = factory.getImageCaptcha();
उनकी इकाई परीक्षण में हम देख सकते हैं, परीक्षण के लिए:
WordGenerator words = new DummyWordGenerator("TESTING");
WordToImage word2image = new SimpleWordToImage();
ImageCaptchaFactory factory = new GimpyFactory(words, word2image);
pixCaptcha = factory.getImageCaptcha();
नोट हमारे पास है कि "WordGenerator" पर समस्त नियंत्रण के लिए इस्तेमाल किया ।
यहाँ एक (काम, पूरी तरह कार्यात्मक) शब्द जनरेटर मैं सिर्फ लिखा है:
fqXVxId
cdVWBSZ
zXeJFaY
aeoSeEb
OuBfzvL
unYewjG
EhbzRup
GkXkTyQ
yDGnHmh
mRFgHWM
FFBkTLF
DvCHIIT
fDmjqLH
XMWSOpa
muukLLN
jUedgYK
FlbWARe
WohMMgZ
lmeLHau
djHRqlc
ध्यान दें कि यदि आप "वास्तविक शब्द" पसंद करते हैं:
private static final Random r = new Random(System.currentTimeMillis());
public String getWord(final Integer length) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
final int rnd = r.nextInt(52);
final char c = (char) (rnd < 26 ? 'a' + rnd : 'A' + (rnd-26));
sb.append(c);
}
return sb.toString();
}
यह इस तरह यादृच्छिक "शब्दों" उत्पन्न करता है (reCaptcha की तरह, लेकिन reCaptcha किसी अन्य उद्देश्य के लिए वास्तविक शब्द का उपयोग कर रहा है - क्योंकि यह स्कैनिंग/ओसीआरिंग पुस्तकों में मदद करता है!) यह कोई समस्या नहीं है, बस getWord (...) को किसी शब्दकोष से यादृच्छिक शब्द चुनने के लिए बदलें।
अब आप अपमानजनक शब्दों को कैसे उठाएंगे? यह तुच्छ है। यहाँ मैं सिर्फ एक उदाहरण देना (कृपया, कोड के बारे में कोई बहस है, यह वास्तव में सिर्फ एक उदाहरण से पता चलता है कि यह कैसे किया जा सकता है है):
private static final Set<String> s = new HashSet<String>();
static {
s.add("f**k");
s.add("suck");
s.add("dick");
}
private static final Random r = new Random(System.currentTimeMillis());
public String getWord(Integer length) {
String cand = getRandomWord(length);
while (isSwearWord(cand)) {
cand = getRandomWord(length);
}
return cand;
}
private boolean isSwearWord(final String w) {
return s.contains(w.toLowerCase());
}
public String getRandomWord(final Integer length) {
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
final int rnd = r.nextInt(52);
final char c = (char) (rnd < 26 ? 'a' + rnd : 'A' + (rnd-26));
sb.append(c);
}
return sb.toString();
}
अब अगर आप कसम शब्द को रोकने के लिए चाहते हैं, आप शायद भी शपथ लेने वाले शब्दों के करीब उन लोगों को रोकना चाहते हैं (उदाहरण के लिए "एफवीके" और "dikk" आदि)। यह एक बार फिर से मामूली बात है:
विधि कीprivate boolean isSwearWord(final String w) {
List<String> ls = generateAllPermutationsWithLevenhsteinEditDistanceOne(w);
for (final String cand : ls) {
if (s.contains(cand.toLowerCase())) {
return true;
}
}
return false;
}
लेखन "generateAllPermutationsWithLevenhsteinEditDistanceOne (डब्ल्यू)" पाठक के लिए एक exercice के रूप में छोड़ दिया है।
क्वाड एरैट प्रदर्शन – SyntaxT3rr0r
@chris_l: आपकी समस्या यह महसूस करने में आपकी दिमाग की विफलता में निहित है कि जब सुरक्षा की बात आती है तो वहां एक विषमता होती है: "प्रतिवादी" के पास हमलावर के बाद अधिक जानकारी उपलब्ध होती है। आपका पूरा जुआ * बिल्कुल * किसी के समान है जो कहता है * "पीकेसीएस काम नहीं कर रहा है क्योंकि आप दो विशाल प्राइम नंबरों को गुणा नहीं कर सकते क्योंकि आप दो विशाल प्राइम नंबरों को कारक नहीं बना सकते" *। जो एक पूरी तरह से परिपत्र तर्क है जो * सटीक * पूरे बिंदु को याद कर रहा है क्यों पीकेसीएस काम करता है और क्यों कैप्चा काम करता है। वहां ** यह सत्यापित करने का एक तरीका होना चाहिए कि कोई जवाब सही है (या गलत)। हमारे पास सर्वर पर शब्द की जानकारी है। – SyntaxT3rr0r
बीटीडब्ल्यू उन सभी क्रमिकरणों को उत्पन्न करता है जिनमें लेवेनस्टीन संपादित करें एक की दूरी संपादन दूरी की गणना करने से कहीं अधिक आसान है। – SyntaxT3rr0r
- 1. क्या एसक्यूएल प्रोफाइलर ट्रेस फ़िल्टर करने का कोई तरीका है?
- 2. क्या HTML दस्तावेज़ में अनाथ शब्दों को स्वचालित रूप से नियंत्रित करने का कोई तरीका है?
- 3. क्या जावा में आक्रामक और पूर्ण कचरा संग्रह लॉन्च करने का कोई तरीका है?
- 4. सी #: क्या enums वर्गीकृत करने का कोई तरीका है?
- 5. क्या फॉर्म प्रतिक्रिया को अनदेखा करने का कोई तरीका है?
- 6. क्या कॉल को कैश करने का कोई तरीका है?
- 7. क्या ऐसा करने का कोई तरीका है?
- 8. क्या सबडोमेन से जेसन लोड करने का कोई तरीका है?
- 9. क्या एचएटीओएम माइक्रोफॉर्मेट को सत्यापित करने का कोई तरीका है?
- 10. क्या स्ट्रिंग को छोटा करने का कोई और तरीका है?
- 11. क्या configManager.AppSettings को ओवरराइड करने का कोई तरीका है?
- 12. क्या TabControl.Items.CurrentChanging को रद्द करने का कोई तरीका है?
- 13. क्या मूसोम घटना को तेज करने का कोई तरीका है?
- 14. क्या ओपनिड को लागू करने का कोई आसान तरीका है?
- 15. क्या SQLLataReader को मल्टीथ्रेड करने का कोई तरीका है?
- 16. क्या YQL को HTML वापस करने का कोई तरीका है?
- 17. क्या gif फ़ाइलों को सिंक करने का कोई तरीका है?
- 18. क्या एक्सएमएल चेतावनियों को अक्षम करने का कोई तरीका है?
- 19. क्या रननेबल को पैरामीटर पास करने का कोई तरीका है?
- 20. क्या StorageFile.CopyAsync() को रद्द करने का कोई तरीका है?
- 21. क्या सी संरचना को डंप करने का कोई तरीका है?
- 22. क्या गिसिस ग्रैफर को काम करने का कोई तरीका है?
- 23. क्या लिनक्स को डिकंपाइल करने का कोई तरीका है। तो?
- 24. क्या वाईएक्स बिल्ड को तेज करने का कोई तरीका है?
- 25. क्या V3 google.maps.Polygon को फीका करने का कोई तरीका है?
- 26. क्या कोई संदर्भ पता प्राप्त करने का कोई तरीका है?
- 27. क्या कोई जेड-इंडेक्स सर्कल करने का कोई तरीका है?
- 28. क्या django व्यवस्थापक में एक क्वेरीसेट फ़िल्टर करने का कोई तरीका है?
- 29. क्या कोई लेबल अक्षम करने का कोई तरीका है?
- 30. क्या सॉकेट को फिर से खोलने का कोई तरीका है?
प्रत्येक शब्द किसी को "संभावित रूप से आक्रामक शब्द" है। – Will
कैप्चास का बिंदु यह है कि एक प्रोग्राम उन्हें 'पढ़ नहीं सकता' और यह पता लगा सकता है कि यह कौन सा शब्द है।कैप्चास के लिए एक अलग स्रोत खोजने के लिए मुझे लगता है कि आपकी किस्मत से बाहर – Holograham
@ होलोग्राम हाँ, दुर्भाग्यवश, मैं जेकप्चाचा का उपयोग करने के लिए बाध्य हो सकता हूं, जब तक कि मैं अन्य टूल नहीं ढूंढ पाता जिसे मैं पैकेज कर सकता हूं और हमें अपने आप पर सत्यापन करने की अनुमति देता है सर्वर। हमें अंतर्राष्ट्रीयकरण और 508 अनुपालन (ऑडियो फाइल) के लिए भी समर्थन की आवश्यकता है, जो जेकप्चा समर्थन करता है। मैं एक बहुत सख्त वास्तुकला समूह (श्वास) से निपट रहा हूं। मुझे री-कैप्चा का उपयोग करना अच्छा लगेगा (जो, मेरा मानना है कि इस तरह की चीज़ के लिए पहले से ही अपने स्वयं के फ़िल्टर हैं), लेकिन आर्किटेक्चर समूह ने इसे घटा दिया है। – elduff