Revert "HBase Thrift HTTP - Shouldn't handle TRACE/OPTIONS methods"

This reverts commit 05f8e94191.

missing jira key
This commit is contained in:
Sean Busbey 2018-04-20 22:43:25 -05:00
parent 298ce96246
commit 1546613e76
3 changed files with 6 additions and 30 deletions

View File

@ -605,6 +605,8 @@ public class TestHttpServer extends HttpServerFunctionalTest {
myServer.stop(); myServer.stop();
} }
@Test @Test
public void testNoCacheHeader() throws Exception { public void testNoCacheHeader() throws Exception {
URL url = new URL(baseUrl, "/echo?a=b&c=d"); URL url = new URL(baseUrl, "/echo?a=b&c=d");
@ -617,15 +619,4 @@ public class TestHttpServer extends HttpServerFunctionalTest {
assertEquals(conn.getHeaderField("Expires"), conn.getHeaderField("Date")); assertEquals(conn.getHeaderField("Expires"), conn.getHeaderField("Date"));
assertEquals("DENY", conn.getHeaderField("X-Frame-Options")); assertEquals("DENY", conn.getHeaderField("X-Frame-Options"));
} }
@Test
public void testHttpMethods() throws Exception {
// HTTP TRACE method should be disabled for security
// See https://www.owasp.org/index.php/Cross_Site_Tracing
URL url = new URL(baseUrl, "/echo?a=b");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("TRACE");
conn.connect();
assertEquals(HttpURLConnection.HTTP_FORBIDDEN, conn.getResponseCode());
}
} }

View File

@ -79,7 +79,6 @@ import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.ParseFilter; import org.apache.hadoop.hbase.filter.ParseFilter;
import org.apache.hadoop.hbase.filter.PrefixFilter; import org.apache.hadoop.hbase.filter.PrefixFilter;
import org.apache.hadoop.hbase.filter.WhileMatchFilter; import org.apache.hadoop.hbase.filter.WhileMatchFilter;
import org.apache.hadoop.hbase.http.HttpServerUtil;
import org.apache.hadoop.hbase.log.HBaseMarkers; import org.apache.hadoop.hbase.log.HBaseMarkers;
import org.apache.hadoop.hbase.security.SaslUtil; import org.apache.hadoop.hbase.security.SaslUtil;
import org.apache.hadoop.hbase.security.SaslUtil.QualityOfProtection; import org.apache.hadoop.hbase.security.SaslUtil.QualityOfProtection;
@ -446,7 +445,6 @@ public class ThriftServerRunner implements Runnable {
// Context handler // Context handler
ServletContextHandler ctxHandler = new ServletContextHandler(httpServer, "/", ServletContextHandler.SESSIONS); ServletContextHandler ctxHandler = new ServletContextHandler(httpServer, "/", ServletContextHandler.SESSIONS);
ctxHandler.addServlet(new ServletHolder(thriftHttpServlet), "/*"); ctxHandler.addServlet(new ServletHolder(thriftHttpServlet), "/*");
HttpServerUtil.constrainHttpMethods(ctxHandler);
// set up Jetty and run the embedded server // set up Jetty and run the embedded server
HttpConfiguration httpConfig = new HttpConfiguration(); HttpConfiguration httpConfig = new HttpConfiguration();

View File

@ -21,8 +21,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
@ -40,7 +38,6 @@ import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.THttpClient; import org.apache.thrift.transport.THttpClient;
import org.apache.thrift.transport.TTransportException; import org.apache.thrift.transport.TTransportException;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.ClassRule; import org.junit.ClassRule;
import org.junit.Rule; import org.junit.Rule;
@ -174,10 +171,8 @@ public class TestThriftHttpServer {
Thread.sleep(100); Thread.sleep(100);
} }
String url = "http://"+ HConstants.LOCALHOST + ":" + port;
try { try {
checkHttpMethods(url); talkToThriftServer(customHeaderSize);
talkToThriftServer(url, customHeaderSize);
} catch (Exception ex) { } catch (Exception ex) {
clientSideException = ex; clientSideException = ex;
} finally { } finally {
@ -194,19 +189,11 @@ public class TestThriftHttpServer {
} }
} }
private void checkHttpMethods(String url) throws Exception {
// HTTP TRACE method should be disabled for security
// See https://www.owasp.org/index.php/Cross_Site_Tracing
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("TRACE");
conn.connect();
Assert.assertEquals(HttpURLConnection.HTTP_FORBIDDEN, conn.getResponseCode());
}
private static volatile boolean tableCreated = false; private static volatile boolean tableCreated = false;
private void talkToThriftServer(String url, int customHeaderSize) throws Exception { private void talkToThriftServer(int customHeaderSize) throws Exception {
THttpClient httpClient = new THttpClient(url); THttpClient httpClient = new THttpClient(
"http://"+ HConstants.LOCALHOST + ":" + port);
httpClient.open(); httpClient.open();
if (customHeaderSize > 0) { if (customHeaderSize > 0) {