url辅助函数

使用URL辅助函数前应先加载:

$this->load->helper('url');

url辅助函数在3.0版本中没太多变动,函数数目没变化

  • site_url()

  • base_url()

  • current_url()

  • uri_string()

  • index_page()

  • anchor()

  • anchor_popup()

  • mailto()

  • safe_mailto()

  • auto_link()

  • url_title()

  • prep_url()

  • url_title()

  • redirect()

site_url()

官方手册这么写的:

无论什么时候需要生成 URL ,都鼓励您使用该函数, 这样当您的根 URL 改变的时候更具有可移植性。

例如:

echo site_url('welcome/hello');
//本机显示,http://localhost/index.php/welcome/hello

本人觉得基本form表单action可用到此函数,例如在views/login.php

<form action=<?=site_url('welcome/login')?> method="post">
<input type="text" name="user" value="jane">
</form>    

对应controllers/welcome.php中就得有login方法去接受表单数据

public function login(){
$this->input->post('user');
//接到值就是jane
}

base_url()

可以用它来指定js、css或imgae路径,此时也应注意这三个文件夹路径放置问题,前人推荐将其放着网站根目录与application,system文件夹同级。例如,css文件可这样链接

<link rel="stylesheet" href="<?=base_url()?>css/bootstrap.min.css">

current_url()

返回当前正在查看的页面的完整URL(包括段)

url_string()

返回任何包含了此函数的页面的URI段

//URL为:http://localhost/index.php/welcome/login
echo url_string();
//显示welcome/login

其他的使用方法可自行查看官方文档

输入类

输入类有两个目的:

  • 为了安全,预处理输入数据。

  • 提供helper的一些方法,取得输入数据,并预处理输入数据。
    说明: 系统自动加载此类,不用手动加载。

$this->input->get()

定义见/system/core/Input.php,234行

public function get($index = NULL, $xss_clean = NULL)
    {
        return $this->_fetch_from_array($_GET, $index, $xss_clean);
    }

接受两个参数,第二个参数为true时,数据经过跨站脚本过滤器过滤(本文最后会对XSS名词解释,具体可参见链接)

  • 不设置任何参数,该方法将以一个数组的形式返回全部GET过来的数据。

  • 把第一个参数设置为NULL,第二个参数设置为 TRUE (boolean),该方法将经过跨站脚本过滤,返回一个包含全部GET数据的数组。

当找不到值时,返回NULL,之前版本是返回false,见官方更新文档

Changed methods get(), post(), get_post(), cookie(), server(), user_agent() to return NULL instead of FALSE when no value is found.

$this->input->post(),$this->input->server(),$this->input->cookie()

这三个方法同get方法,都是接受两个参数,第二个参数有关XSS。

$this->input->set_cookie()

作用是设置一个 Cookie 的值,参见/system/core/Input.php,356行开始,贴出部分源码

public function set_cookie($name, $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = FALSE, $httponly = FALSE)
    {
        if (is_array($name))
        {
            // always leave 'name' in last place, as the loop will break otherwise, due to $$item
            foreach (array('value', 'expire', 'domain', 'path', 'prefix', 'secure', 'httponly', 'name') as $item)
            {
                if (isset($name[$item]))
                {
                    $$item = $name[$item];
                }
            }
        }
        ...
        ...
        setcookie($prefix.$name, $value, $expire, $path, $domain, $secure, $httponly);

$name处可传入字符串或者是数组,如果是数组他将进行foreach循环

其他还有以下方法,就不一一说明

  • get_post()

  • post_get()

  • input_stream()---新增方法

  • ip_address()

  • valid_ip()

  • user_agent()

  • request_headers()

  • get_request_header()

  • is_ajax_request()

  • is_cli_request()

XSS

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。

这里引用freebuf的一篇文章,比我想表达的清楚很多,讲的很详细XSS的原理分析与解剖


em0t
758 声望23 粉丝

Talk is cheap, show me the code


引用和评论

0 条评论