#!/bin/bash echo -e "Content-type: text/html\n\n" cat <<EOF <html> <body> <form action="?foo=1234" method="POST" enctype="application/x-www-form-urlencoded"> bar: <input type="text" name="bar"><br/> foobar: <textarea name="foobar"></textarea></br> <input type="submit"> </form> EOF # (internal) routine to store POST data function cgi_get_POST_vars() { # check content type # FIXME: not sure if we could handle uploads with this.. [ "${CONTENT_TYPE}" != "application/x-www-form-urlencoded" ] && \ echo "bash.cgi warning: you should probably use MIME type "\ "application/x-www-form-urlencoded!" 1>&2 # save POST variables (only first time this is called) [ -z "$QUERY_STRING_POST" \ -a "$REQUEST_METHOD" = "POST" -a ! -z "$CONTENT_LENGTH" ] && \ read -n $CONTENT_LENGTH QUERY_STRING_POST # prevent shell execution local t t=${QUERY_STRING_POST//%60//} # %60 = ` t=${t//\`//} t=${t//\$(//} QUERY_STRING_POST=${t} return } # (internal) routine to decode urlencoded strings function cgi_decodevar() { [ $# -ne 1 ] && return local v t h # replace all + with whitespace and append %% t="${1//+/ }%%" while [ ${#t} -gt 0 -a "${t}" != "%" ]; do v="${v}${t%%\%*}" # digest up to the first % t="${t#*%}" # remove digested part # decode if there is anything to decode and if not at end of string if [ ${#t} -gt 0 -a "${t}" != "%" ]; then h=${t:0:2} # save first two chars t="${t:2}" # remove these v="${v}"`echo -e \\\\x${h}` # convert hex to special char fi done # return decoded string echo "${v}" return } # routine to get variables from http requests # usage: cgi_getvars method varname1 [.. varnameN] # method is either GET or POST or BOTH # the magic varible name ALL gets everything function cgi_getvars() { [ $# -lt 2 ] && return local q p k v s # prevent shell execution t=${QUERY_STRING//%60//} # %60 = ` t=${t//\`//} t=${t//\$(//} QUERY_STRING=${t} # get query case $1 in GET) [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&" ;; POST) cgi_get_POST_vars [ ! -z "${QUERY_STRING_POST}" ] && q="${QUERY_STRING_POST}&" ;; BOTH) [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&" cgi_get_POST_vars [ ! -z "${QUERY_STRING_POST}" ] && q="${q}${QUERY_STRING_POST}&" ;; esac shift s=" $* " # parse the query data while [ ! -z "$q" ]; do p="${q%%&*}" # get first part of query string k="${p%%=*}" # get the key (variable name) from it v="${p#*=}" # get the value from it q="${q#$p&*}" # strip first part from query string # decode and evaluate var if requested [ "$1" = "ALL" -o "${s/ $k /}" != "$s" ] && \ eval "$k=\"`cgi_decodevar \"$v\"`\"" done return } # register all GET and POST variables cgi_getvars BOTH ALL echo "<pre>foo=$foo</pre>" echo "<pre>bar=$bar</pre>" echo "<pre>foobar=$foobar</pre>" cat <<EOF </body> </html> EOF
Thursday, October 11, 2012
bash script cgi post and get process web form input
Thanks to Thanks to http://oinkzwurgl.org/bash_cgi
Subscribe to:
Post Comments (Atom)
2 comments:
salam
jazini hastam
ba 09121764200 tamas gereftam khamoosh bood...
dar morede posti ke dar morede anres zadid bayad begam ke man check kardam va didam hagh ba shoma boodeh...
card shoma avalin cardi boode ke be moshtarian dade boodim va choon card ghable oon male khode man boodeh...
male shoma ba oon ghati shodeh va be eshtebah male shoma dar yek paypal dige zade shodeh boodeh...
man kole hazinatoon ro be enbank toon bargardoondam va az shoma babate in eshtebahe ozr khahi mikonam
jazini
Thanks for the apology, hope you will treat your customers better.
Post a Comment