2011-12-16 6 views
0

나는 나의 자바 HttpServer에 일부 SQL 쿼리를 만들고 싶어하지만 HttpServer에 내가 내 브라우저에 제출 링크에서 특수 문자를 인식하지 못하는 것 같다HttpServer가 Java에서 특수 문자를 인식하도록하려면 어떻게해야합니까?

:

[1]: http://localhost:8001/test?query=SELECT * WHERE{ ?s rdf:type ?o. } 

난 항상이 응답을 수신

400 Bad Request 
URISyntaxException thrown 

이 내 서버의 코드입니다

public class SimpleHttpServer 
{ 

public static void main(String[] args) throws Exception 
{ 

     dir = args[0]; 
     HttpServer server = HttpServer.create(new InetSocketAddress(8001), 0); 
     server.createContext("/test", new MyHandler()); 
     server.setExecutor(null); 
     server.start(); 
    } 

    static class MyHandler implements HttpHandler { 
     public void handle(HttpExchange t) throws IOException { 
      String response ; 
      System.out.println(t.getRequestURI().getQuery().toString().replaceAll("query=", "")); 
      response = ExecuteHttpQuery.getInstance().httpQuery(t.getRequestURI().getQuery().toString().replaceAll("query=", "").toString(), dir) + "\n"; 
      t.sendResponseHeaders(200, response.length()); 
      OutputStream os = t.getResponseBody(); 
      os.write(response.getBytes()); 
      os.close(); 
     } 
    } 
} 

어떻게이 문제를 해결할 수 있습니까?

+2

공백 및 다른 기호가 포함되어 있으므로 링크를 urlencode하고 싶을 것입니다. http://en.wikipedia.org/wiki/Percent-encoding – clamp

답변

4

URL에 SQL 쿼리를 전달해서는 안됩니다.

+0

+1을 참조하십시오.이를 지나치게 강조 할 수는 없습니다. – Perception

+0

이유를 얻으려면 http://en.wikipedia.org/wiki/SQL_injection을 읽을 수 있습니다. – Vadzim

5

예, URL의 특정 부분에서 유효하지 않은 특정 문자가 있습니다. (실제로 이것을 테스트하고 실제 아무것도 SQL 주입 공격을 사용하지 않고 모든을 사용하지 않기를 바란다면 URLEncoder를 사용하여 SQL 쿼리를 먼저 인코딩해야합니다.

+0

나는 HTTPServer와 함께 URLEncoder와 Decoder를 어떻게 통합 할 수 있는지 알려지지 않았다. 예가 무엇입니까? –

+0

@NabilCHOUAIEB - 단순히 클라이언트에서 쿼리를 인코딩하고 서버에서 쿼리를 urldecode하면됩니다. 어떤 부분이 작동하지 않습니까? – jtahlborn

+0

서버 부분이 실행되고 있지 않습니다. 클라이언트가 http : // localhost : 8001/test? query = SELECT * WHERE {? s rdf : type? o. } 간단히 그의 브라우저에서, 그리고 서버가 모든 문자를 인식 할 수 있어야합니다 요청 및 응답을 게시 내가 정확히 무엇을해야합니까? –

관련 문제