I use untaint_path() to check several filenames not just $^X.
To make them safe for what? Most most applications, untaint_path might remove the taint flag, but it doesn't make sure they're safe first.
On that topic, I am using the value of $^X in a qx// call. On Linux at least, if I don't untaint it, I get a nastygram about "insecure dependency." Should perl be a little smarter here?
In unix systems, it's possible to execute a binary at one path while making it think it's at a different path.
$ cat > a.c
#include <stdio.h>
int main(int argc, char** argv) {
printf("%s\n", argv[0]);
return 0;
}
$ gcc -o a a.c
$ perl -e'exec { "a" } "evil"'
evil
Based on a comment in $^X, it looks like there's a way for processes to find out which binary is actually being executed on some systems, and Perl uses it.
If the following doesn't print "evil" on your system, $^X can probably be trusted on your system.
$ perl -e'system { "perl" } "evil", "-le", "print \$^X"'
/usr/bin/perl
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.