第十一节 GET请求

PHP零基础入门

GET请求:在浏览器输入地址就在使用get请求,就是请求检索信息,我只想要Web服务器的信息,我们点击网页的导航发出其它GET请求,服务器响应我们在屏幕上看到的内容。

Get request意味着用户输入,所以我们一定要小心,用户输入太不可信了,无论是Web应用程序或约定应用程序在电脑上运行,这个信息我们没有办法控制,任何我们无法控制的信息都必须假设它是恶意的,因为只有我们高度警惕才能保护自己电脑和我们的应用程序随时不被恶意攻击。

GET请求-实操演示

创建文件夹3.1_get_requests和get_input.php文件。

查询字符串

让我们通过谷歌搜索关键词,返回的路径显示:https://www.google.com/search?ei=,我们看到有个?,问号后面的我们都叫查询字符串,仔细观察q=XX,谷歌正在查询Q后面字符串的参数,所以谷歌的服务就是这样知道用户在搜索什么信息。

假设我们开始编写一个商店,展示单个商品,我们需要这个产品的id,或者识别特定商品的方式,例如我们在浏览器输入路径:http://phpfundamentals2019.com/2.9_get_requests/get_input.php?productid=10回车,页面要返回内容。

回到get_input.php文件

创建productid的变量:

程式解释:

  1. 定义product_id变量;
  2. $_GET超级全局变量;
  3. [”]数组包含查询字符串中的所有productId键。

输出变量$product_id报错:

输出变量$product_id报错

输出变量$product_id报错

productId和productid不同,导致的变量没有定义,修改为统一,刷新页面,我们看到网页上面显示10,让我们把所有的产品的category限量显示在屏幕上,浏览器get写法:

http://phpfundamentals2019.com/2.9_get_requests/get_input.php?category=10&limit=2

输出报错:

因为我们的$_GET超级全局变量productid不存在,我们要做如下修改:

输出代码:

输出结果:

显示产品类目:10 . 仅限 2。

超级全局变量

代码演示:

程式分析:

  1. 在setValues函数里面,我们没有声明$_GET是超级全局,我们只声明$category, $limit;
  2. $_GET可以在整个应用程序中访问,我们不必选择使用它们,它们一直供我们使用。

刷新浏览器,我们看到结果是相同的。

用户通过下面链接提交信息:

如果我们输出一段js代码:

结果如下图:

注入js代码chrome显示

注入js代码chrome显示

注入js代码chrome显示

注入js代码IE显示

注入js代码IE显示

注入js代码IE显示

用户把javascript注入到这页面,正式我们写的hello,xss,这是一个非常大的安全问题。所以回到刚才说的用户输入存在很大的安全隐患,不要认为我们的应用程序小,就忽略了安全,变成被别人攻击的联系场所。

使用Filter_input函数

程式解释:

  1. filter_input函数:通过名称获取特定的外部变量,并且可以通过过滤器处理它;
  2. 参数:
    1. type:INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER或INPUT_ENV;
    2. 规定要过滤的变量名称(必须);
    3. filter:filter类型http://php.net/manual/zh/filter.filters.validate.php;
  3. if()语句条件是$category == false || $limit == false就让程序不运行。

输出结果:

使用Filter_input函数输出结果

使用Filter_input函数输出结果

上述图片没有显示后面的代码:

程式解释:

  1. 我们忽略用户输入;
  2. 我们已经削减了无效的输入,我们没有使用那个输入,而是在我们没有替换的情况下;
  3. 输入是无效的,但是下面页面还继续显示。

输出结果显示:

输出结果显示

输出结果显示

如果我们把category修改为1000,浏览器上面显示1000,如果我们删除后面的limit=asdfadf,还是显示:显示产品类目:100 . 仅限 10 这种情况,我们不需要检查category和limit是否正确,filter_input会帮我们处理。如果他们成功,则返回被过滤的数据,如果失败,返回假。

如果我们修改http://phpfundamentals2019.com/2.9_get_requests/get_input.php?category=100&limit=2,浏览器上面显示:显示产品类目:100 . 仅限 2

代码写的越多,用到filter的地方越多,自然而然也就记住了。

接近10年的互联网从业经验,精通Scrum敏捷软件开发的方法,从事互联网产品设计,开发,测试,运营,案例不少于20个,发现自己最喜欢的工作是做外贸营销,外贸SEO,特别喜欢谷歌优化。从2017年3月开始坚持在群161510483直播谷歌SEO和WEB前端开发技术,只要加进来坚持学习零基础也能够学会。

Last modified: 2019年3月21日

Previous Story

PHP零基础入门

第九节:PHP局部变量和全局变量的作用范围

P变量:局部变量和全局变量的作用范围以及在函数中应该,由于形参相当于函数中定义的变量,所以形参也是一种局部变量,正因为全局变量在任何函数中都可以访问.

...

Next Story

PHP零基础入门

第十二节:PHP发送POST请求

PHP发送POST请求:向指定的资源提交要被处理的数据用POST方法发送参数,请求不会被缓存,请求不会保留在浏览器历史记录中,不能被收藏为书签,请求对数据长度没有要求.

...