防止最终用户操纵URL来更改网站上的内容,方法为GET PHP

时间:2018-06-20 09:43:29

标签: php

我正在构建一个个人搜索网站项目,目前网站上唯一显示的数据是使用SELECT查询和使用超级全局$ _GET ['example'的GET方法检索的数据。 ]。现在,我不知道自己是否做错了,但是仅当URL中的某些GET变量设置为空或不为空时,才会显示页面的某些部分。下面显示了我的URL外观

示例: index.php?search_category = guitar&main_category = 9&postcode_val1 = NP22&distance_default = 100&submit = search

我的网站中有很多这些 if(isset($ _ GET ['search_category'])类型条件,这些条件会根据这些条件是否存在而予以显示并显示特定内容正确或错误。

我去过很多其他具有相似URL的网站,我尝试更改和操纵这些URL,但是当我尝试使用url进行访问时,其内容不会中断,更改或以任何方式更改,这会破坏我的页面并且仅根据设置来显示内容的某些部分。我应该添加其他保护层吗,使用诸如重写规则之类的方法会有帮助吗?下面的代码显示了如何根据URL中设置的内容编写一个下拉框,但是如果用户编辑URL,则很容易将其破坏。

if(isset($_GET['search_category']) && isset($_GET['main_category']) && 
isset($_GET['postcode_val1']) && isset($_GET['distance_default']))
                        {
                            $stmt = $getFromUi->dispCategories();
                            echo "<option value='0'>All</option>";
                            echo "<option value='#'>-------------</option>";

                            while($row  = $stmt->fetch(PDO::FETCH_OBJ))    
                            {
                                $selected = '';

                                if(!empty($_GET['main_category']) && $_GET['main_category'] == $row->cat_id) 
                                {
                                   $selected = ' selected="selected"'; 
                                }

                               echo '<option value="'.htmlentities($row->cat_id).'"'.$selected.'>'.htmlentities($row->cat_title).'</option>';
                             } 
                        }

2 个答案:

答案 0 :(得分:0)

它会中断,因为您在代码上使用逻辑的严格性质。带有isset的&&标记表示您定义的未设置的任何参数均不会为true。如果参数非常灵活,为什么不||

如果需要它仍然评估所有参数,请尝试首先限制主确定器的条件。像$_GET['search_category']一样,并在main if的块代码内根据需要使用其余的$ _GET ['other_parameter']。

答案 1 :(得分:0)

您将需要使用post方法,这样才能代替请求。以我的经验,get只会获取您打开的URL-除非URL中包含任何内容,否则实际上不会传递任何内容。

不确定是否有意义,但请检查发布。

https://www.w3schools.com/tags/ref_httpmethods.asp是开始了解get与post区别的好地方。