Commit fe4d5ee9 authored by titanium007's avatar titanium007

Expose only properties that are safer to user

parent 214be692
......@@ -76,11 +76,11 @@ namespace Titanium.Web.Proxy.Test
if (index >= 0)
{
string URL = e.Decode();
string URL = e.GetRequestHtmlBody();
if (_lastURL != URL)
{
OnChanged(new VisitedEventArgs() { hostname = e.Hostname, URL = URL, remoteIP = e.ipAddress, remotePort = e.Port });
OnChanged(new VisitedEventArgs() { hostname = e.RequestHostname, URL = URL, remoteIP = e.ClientIpAddress, remotePort = e.ClientPort });
}
......@@ -106,7 +106,7 @@ namespace Titanium.Web.Proxy.Test
string c = e.ServerResponse.GetResponseHeader("X-Requested-With");
if (e.ServerResponse.GetResponseHeader("X-Requested-With") == "")
{
e.GetResponseBody();
string responseHtmlBody = e.GetResponseHtmlBody();
string functioname = "fr" + RandomString(10);
string VisitedURL = RandomString(5);
......@@ -116,10 +116,10 @@ namespace Titanium.Web.Proxy.Test
string RandomLastRequest = RandomString(10);
string LocalRequest;
if (e.IsSecure)
LocalRequest = "https://" + e.Hostname + "/" + RandomURLEnding;
if (e.IsSSLRequest)
LocalRequest = "https://" + e.RequestHostname + "/" + RandomURLEnding;
else
LocalRequest = "http://" + e.Hostname + "/" + RandomURLEnding;
LocalRequest = "http://" + e.RequestHostname + "/" + RandomURLEnding;
string script = "var " + RandomLastRequest + " = null;" +
"if(window.top==self) { " + "\n" +
......@@ -135,13 +135,13 @@ namespace Titanium.Web.Proxy.Test
RequestVariable + ".open(\"POST\",\"" + LocalRequest + "\", true); " + "\n" +
RequestVariable + ".send(" + VisitedURL + ");} " + RandomLastRequest + " = " + VisitedURL + "}";
string response = e.ResponseString;
Regex RE = new Regex("</body>", RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.Multiline);
string replaced = RE.Replace(response, "<script type =\"text/javascript\">" + script + "</script></body>", 1);
if (replaced.Length != response.Length)
string modifiedResponseHtmlBody = RE.Replace(responseHtmlBody, "<script type =\"text/javascript\">" + script + "</script></body>", 1);
if (modifiedResponseHtmlBody.Length != responseHtmlBody.Length)
{
e.ResponseString = replaced;
e.SetRequestHtmlBody(modifiedResponseHtmlBody);
_URLList.Add(RandomURLEnding);
}
......
......@@ -9,33 +9,46 @@ namespace Titanium.Web.Proxy.Models
{
public class SessionEventArgs : EventArgs
{
public string RequestURL { get; set; }
public string Hostname { get; set; }
public CustomBinaryReader ClientStreamReader { get; set; }
public string ResponseString { get; set; }
public int RequestLength { get; set; }
public Stream ClientStream { get; set; }
public Version HttpVersion { get; set; }
public bool IsAlive { get; set; }
public bool Cancel { get; set; }
public bool IsSecure { get; set; }
public int Port { get; set; }
private int BUFFER_SIZE;
public HttpWebResponse ServerResponse { get; set; }
public Stream ServerResponseStream { get; set; }
public string RequestHostname { get; set; }
public bool IsSSLRequest { get; set; }
public int ClientPort { get; set; }
public IPAddress ClientIpAddress { get; set; }
public HttpWebRequest ProxyRequest { get; set; }
public Encoding Encoding { get; set; }
public bool WasModified { get; set; }
public System.Threading.ManualResetEvent FinishedRequestEvent { get; set; }
public string UpgradeProtocol { get; set; }
public HttpWebResponse ServerResponse { get; set; }
internal int BUFFER_SIZE;
internal int RequestLength { get; set; }
internal Version RequestHttpVersion { get; set; }
internal bool RequestIsAlive { get; set; }
internal bool CancelRequest { get; set; }
internal CustomBinaryReader ClientStreamReader { get; set; }
internal Stream ClientStream { get; set; }
internal Stream ServerResponseStream { get; set; }
internal Encoding Encoding { get; set; }
internal bool WasModified { get; set; }
internal System.Threading.ManualResetEvent FinishedRequestEvent { get; set; }
internal string UpgradeProtocol { get; set; }
internal string RequestHtmlBody { get; set; }
internal string ResponseHtmlBody { get; set; }
public SessionEventArgs(int BufferSize)
{
BUFFER_SIZE = BufferSize;
}
public string Decode()
public string GetRequestHtmlBody()
{
if (RequestHtmlBody == null)
{
int bytesRead;
int totalBytesRead = 0;
......@@ -49,44 +62,17 @@ namespace Titanium.Web.Proxy.Models
}
mw.Close();
return Encoding.Default.GetString(mw.ToArray());
RequestHtmlBody = Encoding.Default.GetString(mw.ToArray());
}
public void Ok(string Html)
{
if (Html == null)
Html = string.Empty;
var result = Encoding.Default.GetBytes(Html);
StreamWriter connectStreamWriter = new StreamWriter(ClientStream);
var s = String.Format("HTTP/{0}.{1} {2} {3}", HttpVersion.Major, HttpVersion.Minor, 200, "Ok");
connectStreamWriter.WriteLine(s);
connectStreamWriter.WriteLine(String.Format("Timestamp: {0}", DateTime.Now.ToString()));
connectStreamWriter.WriteLine("content-length: " + result.Length);
connectStreamWriter.WriteLine("Cache-Control: no-cache, no-store, must-revalidate");
connectStreamWriter.WriteLine("Pragma: no-cache");
connectStreamWriter.WriteLine("Expires: 0");
if (IsAlive)
{
connectStreamWriter.WriteLine("Connection: Keep-Alive");
return RequestHtmlBody;
}
else
connectStreamWriter.WriteLine("Connection: close");
connectStreamWriter.WriteLine();
connectStreamWriter.Flush();
ClientStream.Write(result, 0, result.Length);
Cancel = true;
public void SetRequestHtmlBody(string Body)
{
this.RequestHtmlBody = Body;
}
public void GetResponseBody()
public string GetResponseHtmlBody()
{
if (ResponseString == null)
if (ResponseHtmlBody == null)
{
Encoding = Encoding.GetEncoding(ServerResponse.CharacterSet);
......@@ -110,9 +96,16 @@ namespace Titanium.Web.Proxy.Models
ResponseData = DecodeData(ServerResponseStream, Encoding);
break;
}
ResponseString = ResponseData;
ResponseHtmlBody = ResponseData;
WasModified = true;
}
return ResponseHtmlBody;
}
public void SetResponseHtmlBody(string Body)
{
this.ResponseHtmlBody = Body;
}
//stream reader not recomended for images
private string DecodeData(Stream ResponseStream, Encoding e)
......@@ -122,12 +115,45 @@ namespace Titanium.Web.Proxy.Models
}
public void Ok(string Html)
{
if (Html == null)
Html = string.Empty;
var result = Encoding.Default.GetBytes(Html);
StreamWriter connectStreamWriter = new StreamWriter(ClientStream);
var s = String.Format("HTTP/{0}.{1} {2} {3}", RequestHttpVersion.Major, RequestHttpVersion.Minor, 200, "Ok");
connectStreamWriter.WriteLine(s);
connectStreamWriter.WriteLine(String.Format("Timestamp: {0}", DateTime.Now.ToString()));
connectStreamWriter.WriteLine("content-length: " + result.Length);
connectStreamWriter.WriteLine("Cache-Control: no-cache, no-store, must-revalidate");
connectStreamWriter.WriteLine("Pragma: no-cache");
connectStreamWriter.WriteLine("Expires: 0");
if (RequestIsAlive)
{
connectStreamWriter.WriteLine("Connection: Keep-Alive");
}
else
connectStreamWriter.WriteLine("Connection: close");
connectStreamWriter.WriteLine();
connectStreamWriter.Flush();
ClientStream.Write(result, 0, result.Length);
CancelRequest = true;
}
public IPAddress ipAddress { get; set; }
}
}
\ No newline at end of file
......@@ -193,7 +193,7 @@ namespace Titanium.Web.Proxy
if (splitBuffer.Length != 3)
{
TcpHelper.SendRaw(httpCmd, tunnelHostName, ref requestLines, args.IsSecure, clientStreamReader.BaseStream);
TcpHelper.SendRaw(httpCmd, tunnelHostName, ref requestLines, args.IsSSLRequest, clientStreamReader.BaseStream);
if (clientStream != null)
clientStream.Close();
......@@ -215,7 +215,7 @@ namespace Titanium.Web.Proxy
if (securehost != null)
{
remoteUri = securehost + remoteUri;
args.IsSecure = true;
args.IsSSLRequest = true;
}
//construct the web request that we are going to issue on behalf of the client.
......@@ -236,7 +236,7 @@ namespace Titanium.Web.Proxy
{
TcpHelper.SendRaw(httpCmd, tunnelHostName, ref requestLines, args.IsSecure, clientStreamReader.BaseStream);
TcpHelper.SendRaw(httpCmd, tunnelHostName, ref requestLines, args.IsSSLRequest, clientStreamReader.BaseStream);
if (clientStream != null)
clientStream.Close();
......@@ -255,21 +255,21 @@ namespace Titanium.Web.Proxy
if (BeforeRequest != null)
{
args.Hostname = args.ProxyRequest.RequestUri.Host;
args.RequestHostname = args.ProxyRequest.RequestUri.Host;
args.RequestURL = args.ProxyRequest.RequestUri.OriginalString;
args.RequestLength = contentLen;
args.HttpVersion = version;
args.Port = ((IPEndPoint)Client.Client.RemoteEndPoint).Port;
args.ipAddress = ((IPEndPoint)Client.Client.RemoteEndPoint).Address;
args.IsAlive = args.ProxyRequest.KeepAlive;
args.RequestHttpVersion = version;
args.ClientPort = ((IPEndPoint)Client.Client.RemoteEndPoint).Port;
args.ClientIpAddress = ((IPEndPoint)Client.Client.RemoteEndPoint).Address;
args.RequestIsAlive = args.ProxyRequest.KeepAlive;
BeforeRequest(null, args);
}
if (args.Cancel)
if (args.CancelRequest)
{
if (args.IsAlive)
if (args.RequestIsAlive)
{
requestLines.Clear();
while (!String.IsNullOrEmpty(tmpLine = clientStreamReader.ReadLine()))
......@@ -301,7 +301,7 @@ namespace Titanium.Web.Proxy
}
if (args.IsSecure)
if (args.IsSSLRequest)
{
if (args.ProxyRequest.Method == "POST" || args.ProxyRequest.Method == "PUT")
args.FinishedRequestEvent.WaitOne();
......
......@@ -62,25 +62,25 @@ namespace Titanium.Web.Proxy
switch (args.ServerResponse.ContentEncoding)
{
case "gzip":
data = CompressionHelper.CompressGzip(args.ResponseString, args.Encoding);
data = CompressionHelper.CompressGzip(args.ResponseHtmlBody, args.Encoding);
WriteResponseStatus(args.ServerResponse.ProtocolVersion, args.ServerResponse.StatusCode, args.ServerResponse.StatusDescription, responseWriter);
WriteResponseHeaders(responseWriter, responseHeaders, data.Length);
SendData(clientWriteStream, data, isChunked);
break;
case "deflate":
data = CompressionHelper.CompressDeflate(args.ResponseString, args.Encoding);
data = CompressionHelper.CompressDeflate(args.ResponseHtmlBody, args.Encoding);
WriteResponseStatus(args.ServerResponse.ProtocolVersion, args.ServerResponse.StatusCode, args.ServerResponse.StatusDescription, responseWriter);
WriteResponseHeaders(responseWriter, responseHeaders, data.Length);
SendData(clientWriteStream, data, isChunked);
break;
case "zlib":
data = CompressionHelper.CompressZlib(args.ResponseString, args.Encoding);
data = CompressionHelper.CompressZlib(args.ResponseHtmlBody, args.Encoding);
WriteResponseStatus(args.ServerResponse.ProtocolVersion, args.ServerResponse.StatusCode, args.ServerResponse.StatusDescription, responseWriter);
WriteResponseHeaders(responseWriter, responseHeaders, data.Length);
SendData(clientWriteStream, data, isChunked);
break;
default:
data = EncodeData(args.ResponseString, args.Encoding);
data = EncodeData(args.ResponseHtmlBody, args.Encoding);
WriteResponseStatus(args.ServerResponse.ProtocolVersion, args.ServerResponse.StatusCode, args.ServerResponse.StatusDescription, responseWriter);
WriteResponseHeaders(responseWriter, responseHeaders, data.Length);
SendData(clientWriteStream, data, isChunked);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment