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,84 +9,70 @@ 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;
MemoryStream mw = new MemoryStream();
var buffer = ClientStreamReader.ReadBytes(RequestLength);
while (totalBytesRead < RequestLength && (bytesRead = buffer.Length) > 0)
{
totalBytesRead += bytesRead;
mw.Write(buffer, 0, bytesRead);
int bytesRead;
int totalBytesRead = 0;
MemoryStream mw = new MemoryStream();
var buffer = ClientStreamReader.ReadBytes(RequestLength);
while (totalBytesRead < RequestLength && (bytesRead = buffer.Length) > 0)
{
totalBytesRead += bytesRead;
mw.Write(buffer, 0, bytesRead);
}
mw.Close();
RequestHtmlBody = Encoding.Default.GetString(mw.ToArray());
}
mw.Close();
return Encoding.Default.GetString(mw.ToArray());
return RequestHtmlBody;
}
public void Ok(string Html)
public void SetRequestHtmlBody(string Body)
{
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");
}
else
connectStreamWriter.WriteLine("Connection: close");
connectStreamWriter.WriteLine();
connectStreamWriter.Flush();
ClientStream.Write(result, 0, result.Length);
Cancel = true;
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
This diff is collapsed.
......@@ -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