Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: sdk/lib/io/http_impl.dart

Issue 443373003: Make the default HTTP server configuration more secure (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed more review comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/http_headers.dart ('k') | tests/standalone/io/http_cookie_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart.io; 5 part of dart.io;
6 6
7 const int _OUTGOING_BUFFER_SIZE = 8 * 1024; 7 const int _OUTGOING_BUFFER_SIZE = 8 * 1024;
8 8
9 class _HttpIncoming extends Stream<List<int>> { 9 class _HttpIncoming extends Stream<List<int>> {
10 final int _transferLength; 10 final int _transferLength;
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 422
423 bool _bufferOutput = true; 423 bool _bufferOutput = true;
424 424
425 final Uri _uri; 425 final Uri _uri;
426 final _HttpOutgoing _outgoing; 426 final _HttpOutgoing _outgoing;
427 427
428 final _HttpHeaders headers; 428 final _HttpHeaders headers;
429 429
430 _HttpOutboundMessage(Uri uri, 430 _HttpOutboundMessage(Uri uri,
431 String protocolVersion, 431 String protocolVersion,
432 _HttpOutgoing outgoing) 432 _HttpOutgoing outgoing,
433 {_HttpHeaders initialHeaders})
433 : super(outgoing, null), 434 : super(outgoing, null),
434 _uri = uri, 435 _uri = uri,
435 headers = new _HttpHeaders( 436 headers = new _HttpHeaders(
436 protocolVersion, 437 protocolVersion,
437 defaultPortForScheme: uri.scheme == 'https' ? 438 defaultPortForScheme: uri.scheme == 'https' ?
438 HttpClient.DEFAULT_HTTPS_PORT : 439 HttpClient.DEFAULT_HTTPS_PORT :
439 HttpClient.DEFAULT_HTTP_PORT), 440 HttpClient.DEFAULT_HTTP_PORT,
441 initialHeaders: initialHeaders),
440 _outgoing = outgoing { 442 _outgoing = outgoing {
441 _outgoing.outbound = this; 443 _outgoing.outbound = this;
442 _encodingMutable = false; 444 _encodingMutable = false;
443 } 445 }
444 446
445 int get contentLength => headers.contentLength; 447 int get contentLength => headers.contentLength;
446 void set contentLength(int contentLength) { 448 void set contentLength(int contentLength) {
447 headers.contentLength = contentLength; 449 headers.contentLength = contentLength;
448 } 450 }
449 451
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 int _statusCode = 200; 498 int _statusCode = 200;
497 String _reasonPhrase; 499 String _reasonPhrase;
498 List<Cookie> _cookies; 500 List<Cookie> _cookies;
499 _HttpRequest _httpRequest; 501 _HttpRequest _httpRequest;
500 Duration _deadline; 502 Duration _deadline;
501 Timer _deadlineTimer; 503 Timer _deadlineTimer;
502 504
503 _HttpResponse(Uri uri, 505 _HttpResponse(Uri uri,
504 String protocolVersion, 506 String protocolVersion,
505 _HttpOutgoing outgoing, 507 _HttpOutgoing outgoing,
508 HttpHeaders defaultHeaders,
506 String serverHeader) 509 String serverHeader)
507 : super(uri, protocolVersion, outgoing) { 510 : super(uri, protocolVersion, outgoing, initialHeaders: defaultHeaders) {
508 if (serverHeader != null) headers._add('server', serverHeader); 511 if (serverHeader != null) headers.set('server', serverHeader);
509 } 512 }
510 513
511 bool get _isConnectionClosed => _httpRequest._httpConnection._isClosing; 514 bool get _isConnectionClosed => _httpRequest._httpConnection._isClosing;
512 515
513 List<Cookie> get cookies { 516 List<Cookie> get cookies {
514 if (_cookies == null) _cookies = new List<Cookie>(); 517 if (_cookies == null) _cookies = new List<Cookie>();
515 return _cookies; 518 return _cookies;
516 } 519 }
517 520
518 int get statusCode => _statusCode; 521 int get statusCode => _statusCode;
(...skipping 1511 matching lines...) Expand 10 before | Expand all | Expand 10 after
2030 if (closing) destroy(); 2033 if (closing) destroy();
2031 }); 2034 });
2032 // Only handle one incoming request at the time. Keep the 2035 // Only handle one incoming request at the time. Keep the
2033 // stream paused until the request has been send. 2036 // stream paused until the request has been send.
2034 _subscription.pause(); 2037 _subscription.pause();
2035 _state = _ACTIVE; 2038 _state = _ACTIVE;
2036 var outgoing = new _HttpOutgoing(_socket); 2039 var outgoing = new _HttpOutgoing(_socket);
2037 var response = new _HttpResponse(incoming.uri, 2040 var response = new _HttpResponse(incoming.uri,
2038 incoming.headers.protocolVersion, 2041 incoming.headers.protocolVersion,
2039 outgoing, 2042 outgoing,
2043 _httpServer.defaultResponseHeaders,
2040 _httpServer.serverHeader); 2044 _httpServer.serverHeader);
2041 var request = new _HttpRequest(response, incoming, _httpServer, this); 2045 var request = new _HttpRequest(response, incoming, _httpServer, this);
2042 _streamFuture = outgoing.done 2046 _streamFuture = outgoing.done
2043 .then((_) { 2047 .then((_) {
2044 response.deadline = null; 2048 response.deadline = null;
2045 if (_state == _DETACHED) return; 2049 if (_state == _DETACHED) return;
2046 if (response.persistentConnection && 2050 if (response.persistentConnection &&
2047 request.persistentConnection && 2051 request.persistentConnection &&
2048 incoming.fullBodyRead && 2052 incoming.fullBodyRead &&
2049 !_httpParser.upgrade && 2053 !_httpParser.upgrade &&
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 2152
2149 2153
2150 // HTTP server waiting for socket connections. 2154 // HTTP server waiting for socket connections.
2151 class _HttpServer 2155 class _HttpServer
2152 extends Stream<HttpRequest> with _ServiceObject 2156 extends Stream<HttpRequest> with _ServiceObject
2153 implements HttpServer { 2157 implements HttpServer {
2154 // Use default Map so we keep order. 2158 // Use default Map so we keep order.
2155 static Map<int, _HttpServer> _servers = new Map<int, _HttpServer>(); 2159 static Map<int, _HttpServer> _servers = new Map<int, _HttpServer>();
2156 2160
2157 String serverHeader; 2161 String serverHeader;
2162 final HttpHeaders defaultResponseHeaders = _initDefaultResponseHeaders();
2158 2163
2159 Duration _idleTimeout; 2164 Duration _idleTimeout;
2160 Timer _idleTimer; 2165 Timer _idleTimer;
2161 2166
2162 static Future<HttpServer> bind(address, int port, int backlog) { 2167 static Future<HttpServer> bind(address, int port, int backlog) {
2163 return ServerSocket.bind(address, port, backlog: backlog).then((socket) { 2168 return ServerSocket.bind(address, port, backlog: backlog).then((socket) {
2164 return new _HttpServer._(socket, true); 2169 return new _HttpServer._(socket, true);
2165 }); 2170 });
2166 } 2171 }
2167 2172
(...skipping 22 matching lines...) Expand all
2190 } 2195 }
2191 2196
2192 _HttpServer.listenOn(this._serverSocket) : _closeServer = false { 2197 _HttpServer.listenOn(this._serverSocket) : _closeServer = false {
2193 _controller = new StreamController<HttpRequest>(sync: true, 2198 _controller = new StreamController<HttpRequest>(sync: true,
2194 onCancel: close); 2199 onCancel: close);
2195 idleTimeout = const Duration(seconds: 120); 2200 idleTimeout = const Duration(seconds: 120);
2196 _servers[_serviceId] = this; 2201 _servers[_serviceId] = this;
2197 try { _serverSocket._owner = this; } catch (_) {} 2202 try { _serverSocket._owner = this; } catch (_) {}
2198 } 2203 }
2199 2204
2205 static HttpHeaders _initDefaultResponseHeaders() {
2206 var defaultResponseHeaders = new _HttpHeaders('1.1');
2207 defaultResponseHeaders.contentType = ContentType.TEXT;
2208 defaultResponseHeaders.set('X-Frame-Options', 'SAMEORIGIN');
2209 defaultResponseHeaders.set('X-Content-Type-Options', 'nosniff');
2210 defaultResponseHeaders.set('X-XSS-Protection', '1; mode=block');
2211 return defaultResponseHeaders;
2212 }
2213
2200 Duration get idleTimeout => _idleTimeout; 2214 Duration get idleTimeout => _idleTimeout;
2201 2215
2202 void set idleTimeout(Duration duration) { 2216 void set idleTimeout(Duration duration) {
2203 if (_idleTimer != null) { 2217 if (_idleTimer != null) {
2204 _idleTimer.cancel(); 2218 _idleTimer.cancel();
2205 _idleTimer = null; 2219 _idleTimer = null;
2206 } 2220 }
2207 _idleTimeout = duration; 2221 _idleTimeout = duration;
2208 if (_idleTimeout != null) { 2222 if (_idleTimeout != null) {
2209 _idleTimer = new Timer.periodic(_idleTimeout, (_) { 2223 _idleTimer = new Timer.periodic(_idleTimeout, (_) {
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
2803 const _RedirectInfo(this.statusCode, this.method, this.location); 2817 const _RedirectInfo(this.statusCode, this.method, this.location);
2804 } 2818 }
2805 2819
2806 String _getHttpVersion() { 2820 String _getHttpVersion() {
2807 var version = Platform.version; 2821 var version = Platform.version;
2808 // Only include major and minor version numbers. 2822 // Only include major and minor version numbers.
2809 int index = version.indexOf('.', version.indexOf('.') + 1); 2823 int index = version.indexOf('.', version.indexOf('.') + 1);
2810 version = version.substring(0, index); 2824 version = version.substring(0, index);
2811 return 'Dart/$version (dart:io)'; 2825 return 'Dart/$version (dart:io)';
2812 } 2826 }
OLDNEW
« no previous file with comments | « sdk/lib/io/http_headers.dart ('k') | tests/standalone/io/http_cookie_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698