2016-08-11 3 views
6

स्ट्रिंग पासवर्ड मानों के लिए कमजोर है। मैंने देखा कि वाडिन PasswordFieldपासवर्ड को String के रूप में उपयोग करता है।पासवर्डफिल्ड वाडिन में char [] के बजाय स्ट्रिंग का उपयोग क्यों करता है?

  • यह Vaadin में PasswordField प्रयोग सुरक्षित है:

    बाद PasswordField के डिफ़ॉल्ट निर्माता,

    public PasswordField() { 
        setValue(""); 
    } 
    

    मेरे सवालों का है?

  • पर आंतरिक API क्या करता है पासवर्ड की सुरक्षा सुनिश्चित करें?
+1

मुझे नहीं लगता कि स्ट्रिंग का उपयोग कैसे कमजोर है। स्ट्रिंग का उपयोग अन्य जावा ढांचे में भी किया जाता है। इसके अलावा, पासवर्ड के लिए पैटर्न सेट करने के लिए रेगेक्स का उपयोग किया जा सकता है। – cdaiga

+5

@cdaiga [इसे देखें] (http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords-in-java) जहां वे समझाते हैं कि क्यों 'char [] 'है 'स्ट्रिंग' से अधिक सुरक्षित –

उत्तर

6

टी एल; डॉ Vaadin PasswordField एक सरल TextField है। इनपुट क्लाइंट-साइड में छिपा हुआ है, सर्वर-साइड में स्पष्ट पाठ में प्रेषित किया जाता है।

हालांकि आप अपने खुद के प्रकार में मूल्य प्राप्त करने/सेट करने के लिए getConvertedValue() और setConvertedValue(Object value) का उपयोग कर सकते हैं। ध्यान दें कि इसे उपयोग करने से पहले आपको setConverter(Converter<T,?> converter) सेट करना होगा।

यहाँ आप ठीक से बातचीत का उपयोग करने के लिए कैसे का एक उदाहरण है: Creating your own converter for String - MyType conversion


में संपूर्ण विवरण

Vaadin TextField, PasswordField और TextAreaAbstractField<String> के सभी बच्चे हैं।

Vaadin Docs TextField

विस्तार में: क्योंकि उसके माता-पिता की String साथ

java.lang.Object 
    |_ com.vaadin.server.AbstractClientConnector 
     |_ com.vaadin.ui.AbstractComponent 
      |_ com.vaadin.ui.AbstractField<java.lang.String> 
       |_ com.vaadin.ui.AbstractTextField 

PasswordField काम करता है, अन्यथा यह AbstractField<char[]> लागू किया जाना चाहिए था।

PasswordField section from Vaadin Docs में इसके अलावा स्पष्ट रूप से कहते हैं:

आप नोट करना चाहिए कि PasswordField केवल दृश्य अवलोकन "कंधे पर" से इनपुट छुपाता है। जब तक सर्वर कनेक्शन को सुरक्षित कनेक्शन से एन्क्रिप्ट नहीं किया जाता है, जैसे कि HTTPS, इनपुट स्पष्ट पाठ में प्रेषित किया जाता है और नेटवर्क पर निम्न-स्तर तक पहुंच वाले किसी भी व्यक्ति द्वारा अवरुद्ध किया जा सकता है। ब्राउजर में जावास्क्रिप्ट निष्पादन सुरक्षा छेद का शोषण करके ब्राउज़र में इनपुट को अवरुद्ध करने वाले फ़िशिंग हमले भी संभव हो सकते हैं।


हालांकि AbstractField<T>getConvertedValue() और setConvertedValue(Object value) जो प्राप्त करने के लिए अनुमति देने के है/Object आपके पसंदीदा रूप में मान सेट करें। ध्यान दें कि इसका उपयोग करने से पहले आपको setConverter(Converter<T,?> converter) सेट करना होगा। उदाहरण से Creating your own converter for String - MyType conversion

संक्षेप में::

NamefirstName और lastName क्षेत्रों और उनके गेटर/सेटर के साथ एक सरल POJO है

यहाँ आप ठीक से बातचीत का उपयोग करने के लिए कैसे का एक उदाहरण है।

कनवर्टर वर्ग

public class StringToNameConverter implements Converter<String, Name> { 

    public Name convertToModel(String text, Locale locale) { 
     String[] parts = text.split(" "); 
     return new Name(parts[0], parts[1]); 
    } 

    public String convertToPresentation(Name name, Locale locale) 
      throws ConversionException { 
     return name.getFirstName() + " " + name.getLastName(); 
    } 

    public Class<Name> getModelType() { 
     return Name.class; 
    } 

    public Class<String> getPresentationType() { 
     return String.class; 
    } 
} 

मुख्य वर्ग

Name name = new Name("Rudolph", "Reindeer"); 
final TextField textField = new TextField("Name"); 
textField.setConverter(new StringToNameConverter()); 
textField.setConvertedValue(name); 
addComponent(textField); 
addComponent(new Button("Submit value", new ClickListener() { 

    public void buttonClick(ClickEvent event) { 
     Name name = (Name) textField.getConvertedValue(); 
    } 

})); 

पूर्ण स्रोत

2

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

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

3

इस पार्टी के लिए देर से एक छोटी सी, लेकिन मैं क्या पहले से ही चर्चा कर रहा है करने के लिए अपने 2 सेंट जोड़ना चाहते हैं।

यह विशुद्ध रूप से Confort और कोड पुन: उपयोग किया जा सकता है के रूप में PasswordField बस हो ओर जो मूल रूप से एक AbstractField<String> इसलिए सभी मूल्य हेरफेर तर्क है पर AbstractTextField फैली हुई है, घटना से निपटने, आदि पहले से ही वहाँ है।

अन्यथा किसी को शायद AbstractField<char[]> लागू करना होगा और इसके लिए AbstractTextField से बहुत अधिक कॉपी कॉपी करना होगा। या AbstractTextField या कुछ समान बनाने के लिए ...

किसी भी तरह से, जैसा कि पहले से ही कहा गया है, किसी हमलावर को सर्वर को एक्सेस करने की आवश्यकता होगी, जिसमें आपको बड़ी समस्या हो सकती है, चाहे वह बाहरी या संगठन के अंदर हो (निश्चित रूप से ऐसे मामले हैं जिनके कर्मचारी कुछ कारणों के लिए नुकसान किया है) :-)

एफई के बारे में, VPasswordField समकक्ष an input of type password बनाता है, और एफई-BE संचार के संबंध में सुरक्षा चिंताओं को पहले से ही पाओलो Forgia के जवाब में चर्चा की गई है।

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