Heim > Java > JavaInterview Fragen > Hauptteil

Fragen zum neuen Java-Interview 2020 – Java Web (2)

王林
Freigeben: 2020-06-16 17:29:39
nach vorne
2243 Leute haben es durchsucht

Fragen zum neuen Java-Interview 2020 – Java Web (2)

1. Kann die Sitzung weiterhin verwendet werden, wenn der Client Cookies deaktiviert?

Cookie und Session werden im Allgemeinen als zwei unabhängige Dinge betrachtet. Session verwendet eine Lösung, die den Status auf der Serverseite verwaltet, während Cookie eine Lösung verwendet, die den Status auf der Clientseite verwaltet. Aber warum kann ich die Sitzung nicht erhalten, wenn ich Cookies deaktiviere? Da die Sitzung die Sitzungs-ID verwendet, um die Serversitzung zu ermitteln, die der aktuellen Konversation entspricht, und die Sitzungs-ID über Cookie weitergeleitet wird, entspricht das Deaktivieren von Cookies dem Verlust der Sitzungs-ID, und Sie erhalten keine Sitzung.

Angenommen, der Benutzer verwendet Session, wenn Cookies deaktiviert sind. Es gibt mehrere Möglichkeiten, dies zu erreichen:

  • Setzen Sie „session.use_trans_sid = 1“ in der php.ini Konfigurationsdatei“ oder aktivieren Sie beim Kompilieren die Option „--enable-trans-sid“, damit PHP die Sitzungs-ID automatisch seitenübergreifend weitergibt.

  • Übergeben Sie den Wert manuell über die URL und die Sitzungs-ID über das versteckte Formular.

  • Speichern Sie die Sitzungs-ID in einer Datei, Datenbank usw. und rufen Sie sie während des seitenübergreifenden Prozesses manuell auf.

2. Was ist der Unterschied zwischen Feder-MVC und Federbeinen?

1. Unterschiede in den Abfangmechanismen

Struts2 ist ein Abfangen auf Klassenebene. Bei der Integration mit Spring ist der ActionBean-Injektionsbereich von Struts2 .Prototyp und fügen Sie dann die Anforderungsdaten über Setter und Getter in die Eigenschaft ein. In Struts2 entspricht eine Aktion einem Anforderungs- und Antwortkontext. Beim Empfang von Parametern kann sie über Attribute empfangen werden. Dies zeigt, dass Attributparameter von mehreren Methoden gemeinsam genutzt werden. Eine Aktionsmethode in Struts2 kann einer URL entsprechen, ihre Klassenattribute werden jedoch von allen Methoden gemeinsam genutzt. Dies bedeutet, dass es nicht möglich ist, Anmerkungen oder andere Methoden zur Identifizierung ihrer Methode zu verwenden, und sie nur als mehrere Instanzen entworfen werden kann.

SpringMVC ist ein Abfangen auf Methodenebene. Eine Methode entspricht einem Anforderungskontext, sodass die Methode grundsätzlich unabhängig ist und exklusiven Zugriff auf Anforderungs- und Antwortdaten hat. Jede Methode entspricht gleichzeitig einer URL. Die Parameterübergabe wird direkt in die Methode eingefügt, was für die Methode einzigartig ist. Die Verarbeitungsergebnisse werden über ModeMap an das Framework zurückgegeben. Während der Spring-Integration verwendet SpringMVCs Controller-Bean standardmäßig den Singleton-Modus, sodass standardmäßig nur ein Controller für alle Anforderungen erstellt wird. Es sollten keine gemeinsamen Eigenschaften vorhanden sein, sodass es threadsicher ist. Wenn Sie den Standardbereich ändern möchten, ist dies erforderlich @Scope-Annotationsänderung hinzufügen.

Struts2 verfügt über einen eigenen Interceptor-Mechanismus. SpringMVC verwendet eine unabhängige Aop-Methode, wodurch die Anzahl der Konfigurationsdateien von Struts2 größer ist als die von SpringMVC.

(Verwandte Tutorials empfohlen: Java-Einstiegsprogramm )

2. Unterschiede in den zugrunde liegenden Frameworks

Struts2 wird mit Filter (StrutsPrepareAndExecuteFilter), SpringMVC ( DispatcherServlet ) wird mithilfe von Servlet implementiert. Der Filter wird initialisiert, nachdem der Container gestartet wurde; er stürzt ab, nachdem der Dienst gestoppt wurde, später als Servlet. Das Servlet wird beim Aufruf initialisiert, bevor Filter aufgerufen wird, und wird zerstört, nachdem der Dienst beendet wurde.

3. Leistung

Struts2 ist ein Abfangen auf Klassenebene, das alle Attributwertinjektionen laden muss basiert auf der Methode „Abfangen“, bei der eine Singleton-Modus-Bean zur Injektion geladen wird. Daher sind die Entwicklungseffizienz und Leistung von SpringMVC höher als bei Struts2.

4. Konfiguration

spring MVC und Spring sind nahtlos. Das Management und die Sicherheit dieses Projekts sind ebenfalls höher als bei Struts2.

3. Wie vermeide ich SQL-Injection?

  • PreparedStatement (einfache und effektive Methode)

  • Verwenden Sie reguläre Ausdrücke, um eingehende Parameter zu filtern

  • String-Filterung

  • Rufen Sie diese Funktion in JSP auf, um zu überprüfen, ob sie illegale Zeichen enthält

  • JSP-Seitenbeurteilungscode

4. Was ist ein XSS-Angriff und wie kann man ihn vermeiden?

XSS-Angriff wird auch CSS genannt, der vollständige Name ist Cross-Site-Script (Cross-Site-Scripting-Angriff). Das Prinzip besteht darin, dass der Angreifer bösartigen HTML-Code in eine Website mit XSS-Schwachstellen eingibt Wenn der Benutzer die Website durchsucht, wird dieser HTML-Code automatisch ausgeführt, um den Angriffszweck zu erreichen.

XSS-Angriffe ähneln SQL-Injection-Angriffen. Bei XSS-Angriffen werden SQL-Anweisungen als Benutzereingabe verwendet, um die Browsersteuerung zu steuern Erhalten Sie einige Benutzerinformationen. XSS ist eine häufige Schwachstelle in Webprogrammen. XSS ist eine passive Angriffsmethode, die auf der Clientseite eingesetzt wird.

Die allgemeine Idee der XSS-Prävention besteht darin, die Eingabe (und URL-Parameter) zu filtern und die Ausgabe zu kodieren.

(Empfohlenes Video-Tutorial: Java-Video-Tutorial)

5. Was ist ein CSRF-Angriff und wie kann man ihn vermeiden?

CSRF (Cross-Site-Request-Forgery) wird auch als One-Click-Angriff oder Session-Riding bezeichnet. Der vollständige chinesische Name lautet Cross-Site-Request-Forgery. Im Allgemeinen fälscht ein Angreifer eine Anfrage vom Browser des Benutzers und sendet sie an eine Website, für deren Besuch sich der Benutzer authentifiziert hat, sodass die Zielwebsite den Befehl empfängt, fälschlicherweise annimmt, dass es sich um den tatsächlichen Vorgang des Benutzers handelt, und den Befehl ausführt. Wird häufig verwendet, um Konten zu stehlen, Geld zu überweisen, falsche Nachrichten zu senden usw. Der Angreifer nutzt die Sicherheitslücke der Website zur Anforderungsüberprüfung aus, um einen solchen Angriff durchzuführen. Die Website kann bestätigen, dass die Anforderung vom Browser des Benutzers stammt, kann jedoch nicht überprüfen, ob die Anforderung von der wahren Absicht des Benutzers stammt.

So vermeiden Sie:

1. Überprüfen Sie das HTTP-Referer-Feld

Das Referer-Feld im HTTP-Header zeichnet die Quelladresse der HTTP-Anfrage auf. Unter normalen Umständen kommt die Anfrage zum Zugriff auf eine sicherheitsbeschränkte Seite von derselben Website, und wenn ein Hacker einen CSRF-Angriff darauf durchführen möchte, kann er die Anfrage im Allgemeinen nur auf seiner eigenen Website erstellen. Daher können CSRF-Angriffe durch die Überprüfung des Referrer-Werts abgewehrt werden.

2. Verifizierungscode verwenden

Verifizierungscode zu Schlüsseloperationsseiten hinzufügen Nach Erhalt der Anfrage kann der Hintergrund den Verifizierungscode beurteilen, um CSRF zu verhindern. Diese Methode ist jedoch nicht sehr benutzerfreundlich.

3. Token zur Anfrageadresse hinzufügen und überprüfen

Der Grund für den Erfolg des CSRF-Angriffs liegt darin, dass Hacker die Anfrage des Benutzers vollständig fälschen können und alle Benutzerüberprüfungsinformationen in der Anfrage vorhanden sind Cookies, sodass Hacker die eigenen Cookies des Benutzers direkt verwenden können, um die Sicherheitsüberprüfung zu bestehen, ohne die Überprüfungsinformationen zu kennen.

Um CSRF zu widerstehen, besteht der Schlüssel darin, Informationen in die Anfrage einzufügen, die Hacker nicht fälschen können, und diese Informationen sind im Cookie nicht vorhanden. Sie können der HTTP-Anfrage ein zufällig generiertes Token als Parameter hinzufügen und auf der Serverseite einen Interceptor erstellen, um das Token zu überprüfen. Wenn in der Anfrage kein Token vorhanden ist oder der Token-Inhalt falsch ist, wird davon ausgegangen, dass dies der Fall ist ein CSRF-Angriff und die Anfrage wird abgelehnt.

Diese Methode ist sicherer als die Überprüfung des Referrs. Das Token kann nach der Anmeldung des Benutzers generiert und in der Sitzung platziert werden. Anschließend kann das Token bei jeder Anfrage aus der Sitzung entnommen und mit dem eingetroffenen Token abgeglichen werden Vergleichen Sie die Anforderung. Die Schwierigkeit dieser Methode besteht jedoch darin, wie das Token in Form von Parametern zur Anforderung hinzugefügt wird.

Bei GET-Anfragen wird das Token an die Anfrageadresse angehängt, sodass die URL zu

http://url?csrftoken=tokenvalue
Nach dem Login kopieren

wird. Bei POST-Anfragen fügen Sie am Ende des Formulars

<input type="hidden" name="csrftoken" value="tokenvalue"/>
Nach dem Login kopieren
Auf diese Weise wird das Token in Form eines Parameters zur Anfrage hinzugefügt.


Attribute im HTTP-Header anpassen und überprüfen

Diese Methode verwendet auch Token zur Überprüfung. Der Unterschied zur vorherigen Methode besteht darin, dass das Token hier nicht verwendet wird Platzieren Sie es als Parameter in der HTTP-Anfrage und fügen Sie es in ein benutzerdefiniertes Attribut im HTTP-Header ein. Über die XMLHttpRequest-Klasse können Sie das HTTP-Header-Attribut csrftoken allen Anforderungen dieses Typs gleichzeitig hinzufügen und den Token-Wert darin einfügen.

Dies beseitigt die Unannehmlichkeiten beim Hinzufügen eines Tokens zur Anforderung in der vorherigen Methode. Gleichzeitig wird die über XMLHttpRequest angeforderte Adresse nicht in der Adressleiste des Browsers aufgezeichnet, und es besteht kein Grund zur Sorge Token wird über den Referrer an andere Websites weitergegeben.

Wenn Sie weitere verwandte Interviewfragen erfahren möchten, können Sie die Spalte

Java-Interviewfragen besuchen.

Das obige ist der detaillierte Inhalt vonFragen zum neuen Java-Interview 2020 – Java Web (2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!