mirror of https://github.com/OISF/suricata
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
 | 
						|
TODO
 | 
						|
====
 | 
						|
 | 
						|
- A failure to parse a part of a transaction does not necessarily mean we have to
 | 
						|
  give up (on the transaction and on the connection).
 | 
						|
 | 
						|
- Inspect storage size choices for all structures
 | 
						|
 | 
						|
- Table key storage and element retrieval is inefficient.
 | 
						|
 | 
						|
- We're currently using a fixed-size line buffer. Although one buffer isn't very big,
 | 
						|
  they add up if we want to supports tens of thousands of concurrent connections. For
 | 
						|
  example 20K connections x 20K buffer = 400M. We can perhaps start with a 2K buffer
 | 
						|
 (configurable) and grow as needed.
 | 
						|
 | 
						|
- Implement htp_get_version().
 | 
						|
 | 
						|
- Find all places where we use external information to determine input length. Ensure
 | 
						|
  the storage types are big enough to hold the biggest numbers we want to handle, and
 | 
						|
  ensure that we are able to detect wrapping and such.
 | 
						|
 | 
						|
 | 
						|
MISC NOTES
 | 
						|
==========
 | 
						|
 | 
						|
- Memory allocation strategies. We want to support two strategies:
 | 
						|
 | 
						|
    #1 Supply a pair of functions (alloc and free) along with a void * pointer.
 | 
						|
 | 
						|
    #2 Use memory pools for all allocations. Desired functions:
 | 
						|
 | 
						|
       - create pool (w/hierarchy), destroy pool, clear pool
 | 
						|
       - alloc (calloc?), free
 | 
						|
       - register callback
 | 
						|
 | 
						|
    The plan is to have a simple memory pool implementation that does not pool memory
 | 
						|
    but only tracks what is allocated so that it can free it all in one go. The library
 | 
						|
    users can provide an external implementation to use if they so wish.
 | 
						|
 | 
						|
- Consider enums where appropriate.
 | 
						|
 | 
						|
- The plan for SSL handling is as follows:
 | 
						|
 | 
						|
  - For fully encrypted streams, upstream is free to decrypt SSL and feed the
 | 
						|
    parser just the data.
 | 
						|
 | 
						|
  - On-demand SSL is not used with HTTP in practice but, in principle, the idea
 | 
						|
    is to have the parser return the HTP_TLS_UPGRADE code. Upon detecting the
 | 
						|
    code, upstream would handle the upgrade (either by passively decrypting the
 | 
						|
    traffic stream or handling SSL/TLS directly) and provide plain text data
 | 
						|
    to the HTTP parser on every subsequent invocation.
 | 
						|
 | 
						|
- Document the source for each request method
 | 
						|
 | 
						|
- At some point test the performance of the macros that fetch data and
 | 
						|
  determine if it makes more sense to implement the same functionality
 | 
						|
  as functions
 | 
						|
 | 
						|
- There will be two types of hook: connection and transaction hooks. If we want to allow
 | 
						|
  a hook to disconnect itself (as we should) then we need to make sure the disconnect is
 | 
						|
  applied to the correct scope. For example, a transaction hook that requires disconnection
 | 
						|
  should not be invoked for the same transaction, but should be invoked for the subsequent
 | 
						|
  transaction. This tells me that we need to keep a prototype of transaction hooks and to
 | 
						|
  make a copy of it whenever a new transaction begins.
 | 
						|
 | 
						|
- Does the API need to support closing one stream at a time? For example, when
 | 
						|
  a client sends his request(s), closes his side of a connection, then waits for
 | 
						|
  the server to respond.
 | 
						|
 | 
						|
- Detect if the request headers were submitted across several packets (which would
 | 
						|
  indicate manual access).
 | 
						|
 | 
						|
- Do we want to have separate limits for headers? Or should headers also use the line limits?
 | 
						|
 | 
						|
- Perhaps we also want to limit the size of the request line and headers combined, like the
 | 
						|
  IIS does?
 | 
						|
 | 
						|
- Chunk length evasion
 | 
						|
 | 
						|
- Chunk length limit
 | 
						|
 | 
						|
- Add callbacks to the list and table structures to automatically delete the elements
 | 
						|
  they contain when their respective destroy methods are invoked
 | 
						|
 | 
						|
- Perhaps best-fit maps should also have the replacement character?
 | 
						|
 | 
						|
- Test double-decoding with IIS4 or IIS5 |