Wir haben mehrere sensible Felder in unserer Datenbank, von denen verhindert werden muss, dass sie in den Java-String-Pool gelangen. Alle sind VARCHAR in der Datenbank und wir verwenden StringBuilders in unserem Code, um zu verhindern, dass sie in den Konstantenpool eingefügt werden.Wie verhindert man, dass ein mybatis varchar den String-Pool in Java eingibt?
Wir verwenden MyBatis, um mit der Datenbank zu interagieren, und ich versuche gerade, einen Typhandler zu implementieren, den ich versuche, SetObject zu verwenden, um StringBuilder zu Varchar zuzuordnen.
Ich frage mich, ob dies möglich ist und, wenn es ist, gibt es andere Bereiche zwischen MyBatis und JDBC, die bedeuten, dass der VARCHAR nicht im String-Pool endet nicht garantiert werden kann? (Casts im Code, kommen Aussagen wie Saiten, diese Art der Sache)
Ich habe auch die Frage nach der Mybatis-Benutzer Google-Gruppe gefragt, aber bisher niemand in der Lage war, dort zu helfen
bearbeiten - Ich sollte klarstellen, dass es nicht ausschließlich um den String-Pool geht, sondern darum, die Daten auf dem Heap zu kontrollieren und die Daten aus der veränderbaren CharSequence so schnell wie möglich durch Überschreiben mit Nullen zu löschen. Die Zeichenfolgen können absolut nicht in den Pool eingegeben werden, aber das einfache Nullen einer Zeichenfolge, die sich nicht im Pool befindet, kann aufgrund der Funktionsweise der Speicherbereinigung weiterhin zu Sicherheitsproblemen führen.
String wird nur in String pul am Ende, wenn es im Code oder 'intern' Methode konstant genannt wurde. Ich denke nicht, dass du dir deswegen Sorgen machen musst. – talex
Gemäß den Best Practices sollten Sie sicherstellen, dass die Zeichenfolge in etwas auf dem Heap ist und so schnell wie möglich überschrieben wird. Selbst wenn es nicht im Konstantenpool ist, wenn ein Verweis nicht sofort überschrieben wird, verursacht es dennoch Probleme, wenn ein Heapdump ist erzeugt. Wenn es auf null gesetzt ist, kann es aufgrund der Funktionsweise der Speicherbereinigung immer noch vorhanden sein – SMC
In diesem Fall verwenden Sie besser 'char []', da Sie Daten einfach überschreiben können. Und ich bin auch wenig eifersüchtig, weil ich nie mit so hohen Sicherheitsstufen arbeite. – talex