Richard Walker Richard Walker - 1 month ago 13
HTTP Question

Is it possible to pass a space character to a cgi?

I have a compiled c binary (setch) which takes the parameters

HIGH/LOW/OFF
so I am trying to execute the command eg
setch OFF
from javascript/jquery thus:

$.get("cgi-bin/setch.cgi","OFF"); -or
$.get("cgi-bin/setch OFF");


As it's a get then the space is encoded into %20, of course. However the server then tries to execute the command
setch%20OFF
and returns:


404 Not Found


Without the parameter the program executes and returns my message:


no parameters


ie all paths, permissions etc are OK

Am I trying to do the impossible here? Or am I missing something in the server (lighttpd) config?
Thanks

Answer

You want to pass a parameter to a CGI. The way to do that is not to separate them with a space, instead you want to put the parameter behind a "?" character. The HTTP server will then store everything that follows behind the question mark in the QUERY_STRING environment variable that your CGI can then read.

I.e.

$.get("cgi-bin/setch?OFF");

In your C program use getenv("QUERY_STRING") to access the passed parameter.

Check https://en.wikipedia.org/wiki/Common_Gateway_Interface for a list of all environment variables that the HTTP server set for CGI programs. Be sure to treat the values as untrusted data.