IF工作不正确的PHP条件

时间:2015-05-13 19:47:55

标签: php if-statement upload conditional-statements

我有以下代码,当我上传名为" abc.htaccess"的文件时然后通过显示" attacked"来正常工作,但是当我上传abc.php或abcphp文件名时,它告诉我文件已上传。 那么if(false&& true)(与上传.php文件相同)和if(true&& true)(与上传.htaccess文件相同)的条件是什么。

<!DOCTYPE html>
<html>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"><input type="submit" value="Upload Image" name="submit">
    </form>
    <br />
    <br />
    <?php
        $target_dir = "./";
        $target_file =  $target_dir . $_FILES["fileToUpload"]["name"];

        echo "Filename: " . $_FILES["fileToUpload"]["name"];
        var_dump(strpos(strtolower($_FILES["fileToUpload"]["name"]),"php"));
        var_dump(strpos(strtolower($_FILES["fileToUpload"]["name"]), "htaccess"));

        if(1==1 && 1==2){
            echo "Condition test: 1==1 && 1==2";
        }
        if(1==1 && 2==2){
            echo "Condition test: 1==1 && 2==2";
        }

        if((strpos(strtolower($_FILES["fileToUpload"]["name"]),"php") == false) && (strpos(strtolower($_FILES["fileToUpload"]["name"]), "htaccess") == false)){
            if(isset($_POST["submit"])) {
                move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_file);
                echo "Uploaded file: <a href='http://" .$_SERVER['SERVER_NAME'] . "/" . $_FILES["fileToUpload"]["name"] . "' target='_blank'>" . $_FILES["fileToUpload" . "</a>";
                echo "File uploaded";
            }
        }else{echo "attacked";}
    ?>

2上传时间的结果如下:

<pre>
    1st:
        Filename: phpminiadmin.phpint(0)
        bool(false)
        Condition: 1==1 && 2==2Uploaded file: <a href="http://domain.com/phpminiadmin.php" target="_blank">phpminiadmin.php</a>

    2nd:
        Filename: desktop.htaccessbool(false)
        int(8)
        Condition: 1==1 && 2==2attacked
</pre>

1 个答案:

答案 0 :(得分:0)

在评估文件的字符串位置时,您的代码返回0&#34; phpminiadmin.php&#34;因此&#34; ==&#34;将其解释为FALSE。

例如,尝试使用文件名&#34; aphpminiadmin.php&#34;。您的代码将正常工作,因为strpos返回1显然不是假的。

因此,MonkeyZeus建议的更改将解决问题。

MonkeyZeus - 希望你不要介意我的答案。 &#39;只是觉得这个例子更清楚地说明了这个问题。