Ich habe Folgendes in die web.xml meiner Anwendung eingefügt, um zu versuchen, PUT, DELETE usw. Nicht zuzulassen:
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted methods</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>PUT</http-method>
<http-method>SEARCH</http-method>
<http-method>COPY</http-method>
<http-method>MOVE</http-method>
<http-method>PROPFIND</http-method>
<http-method>PROPPATCH</http-method>
<http-method>MKCOL</http-method>
<http-method>LOCK</http-method>
<http-method>UNLOCK</http-method>
<http-method>delete</http-method>
<http-method>put</http-method>
<http-method>search</http-method>
<http-method>copy</http-method>
<http-method>move</http-method>
<http-method>propfind</http-method>
<http-method>proppatch</http-method>
<http-method>mkcol</http-method>
<http-method>lock</http-method>
<http-method>unlock</http-method>
</web-resource-collection>
<auth-constraint />
</security-constraint>
Ok, also jetzt:
Wenn ich eine Anfrage mit der Methode von mache, DELETE
bekomme ich eine 403 zurück.
Wenn ich eine Anfrage mit der Methode von mache, delete
bekomme ich eine 403 zurück.
ABER
Wenn ich eine Anfrage mit der Methode von mache, DeLeTe
bekomme ich OK!
Wie kann ich dafür sorgen, dass diese Groß- und Kleinschreibung nicht berücksichtigt wird?
Bearbeiten: Ich teste es mit einem C # -Programm:
private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = "making request";
System.Threading.Thread.Sleep(400);
WebRequest req = WebRequest.Create("http://serverurl/Application/cache_test.jsp");
req.Method = txtMethod.Text;
try
{
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
textBox1.Text = "Status: " + resp.StatusCode;
if (resp.StatusCode == System.Net.HttpStatusCode.OK)
{
WebHeaderCollection header = resp.Headers;
using (System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), ASCIIEncoding.ASCII))
{
//string responseText = reader.ReadToEnd();
textBox1.Text += "\r\n" + reader.ReadToEnd();
}
}
}
catch (Exception ex)
{
textBox1.Text = ex.Message;
}
}
txtMethod.Text
ist ein Textfeld, in das ich den Methodennamen eingebe. Wenn es eine 403 gibt, wird eine Ausnahme ausgelöst, die im catch-Block abgefangen wird.
Die Datei cache_test.jsp enthält:
<%
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma","no-cache");
out.print("Method used was: "+request.getMethod());
%>
HttpWebRequest
wird case-insensitiv erkennen und konvertieren Standard - HTTP - Methoden in Großbuchstaben. Darüber hinaus wird dokumentiert, dass nur Standard-HTTP-Methoden zulässig sind. Die beste Option ist die Verwendung eines unformatierten TCP-Streams (z. B. in Netcat, PuTTY Raw oder Telnet usw.).