Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🎁 Check lower-cased proxy settings as well #354

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion lib/HttpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,10 @@ export class HttpClient implements ifm.IHttpClient {
constructor(userAgent: string | null | undefined, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions) {
this.userAgent = userAgent;
this.handlers = handlers || [];
let no_proxy: string = process.env[EnvironmentVariables.NO_PROXY];
let no_proxy: string = process.env[EnvironmentVariables.NO_PROXY]
if (!no_proxy) {
no_proxy = process.env[EnvironmentVariables.NO_PROXY.toLowerCase()];

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the contribution! Your change is reasonable given the issue described in the article you linked.
However, we also need to consider the possible impact of this change in case someone has stale lower-case proxy information defined. One possible option would be to raise a user-visible warning, but I don't think there is a pattern in this library to surface warnings. We'd like to hear your thoughts on this option or any other suggestions you might have.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't worry about stale env variables. A lot of tools uses lower-cased proxy settings, a majority. I don't think this is an issue.

Taking the worst case into account: Someone has a compromised machine with malicious setting in http_proxy var. If that's the case, that person is already scudded, as countless tools use lower-cased http_proxy, far more than they use HTTP_PROXY. That's why I wouldn't bother to care about it.

Also, I have never seen a tool to warn that you are using http_proxy in a wrong case. They all seem to just use whatever they support.

See the thread: https://unix.stackexchange.com/a/212972

Of course, you could hide this change behind a feature flag. But, as I said above, I think this is kinda pointless. I made this PR just for the convenience of using defaults. I spent like ~2 hours debugging why Mitmproxy isn't working with this library. Until, I jumped into the sources to find that this lib uses HTTP_PROXY. Every other tool I have, uses http_proxy. That's a default for Linux/Mac.

}
if (no_proxy) {
this._httpProxyBypassHosts = [];
no_proxy.split(',').forEach(bypass => {
Expand Down Expand Up @@ -552,7 +555,13 @@ export class HttpClient implements ifm.IHttpClient {

// fallback to http_proxy and https_proxy env
let https_proxy: string = process.env[EnvironmentVariables.HTTPS_PROXY];
if (!https_proxy) {
https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY.toLowerCase()];
}
let http_proxy: string = process.env[EnvironmentVariables.HTTP_PROXY];
if (!http_proxy) {
http_proxy = process.env[EnvironmentVariables.HTTP_PROXY.toLowerCase()];
}

if (!proxyConfig) {
if (https_proxy && usingSsl) {
Expand Down