本文目录一览:
用了富文本,怎么避免xss攻击
后台过滤就可以了。例如script ,input 标签直接replace掉 ,onclick. onxxx 之类也replace掉。只允许图文的html标记和样式存在。
thinkphp怎么做才是安全的sql防注入
注入的产生一般都是对用户输入的参数未做任何处理直接对条件和语句进行拼装.
代码举例:
//不安全的写法举例1
$_GET['id']=8;//希望得到的是正整数
$data=M('Member')-where('id='.$_GET['id'])-find();
$_GET['id']='8 or status=1';//隐患:构造畸形查询条件进行注入;
//安全的替换写法
$data=M('Member')-where(array('id'=$_GET['id']))-find();//使用数组方式将自动使用框架自带的字段类型检测防止注入
$data=M('Member')-where(array('id'=(int)$_GET['id']))-find();//类型约束
$data=M('Member')-where('id='.intval($_GET['id']))-find();//类型转换
$data=M('Member')-where(array('id'=I('get.id','','intval')))-find();//本人习惯写法
$data=M('Member')-where(array('id'=':id'))-bind(':id',I('get.id'))-select();//PDO驱动可以使用参数绑定
$data=M('Member')-where("id=%d",array($_GET['id']))-find();//预处理机制
//不安全的写法举例2
$_GET['id']=8;//希望得到的是正整数
$data=M()-query('SELECT * FROM `member` WHERE id='.$_GET['id']);//执行的SQL语句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隐患:构造畸形语句进行注入;
2.防止注入的总的原则是根据具体业务逻辑,对来源于用户的值的范围,类型和正负等进行限制和判断,同时尽量使用THINKPHP自带的SQL函数和写法.
3.在THINKPHP3.2版本中的操作步骤是:
一:在项目配置文件中添加配置: 'DEFAULT_FILTER' = 'htmlspecialchars', //默认过滤函数
二: 使用框架带的I方法获取来自用户提交的数据;
例子:M('Member')-save(array('content'=I('post.content')));这样添加的content内容是经过htmlspecialchars处理过的.
4.为COOKIE添加httponly配置
5.最新版本的thinkphp已经支持此参数。
6.HTML5值得观注的新特性:
9.富文本过滤
富文本过滤是,XSS攻击最令人头疼的话题,不仅是小网站,就连BAT这样的巨头也是三天两头的被其困扰.
php下怎样防止XSS攻击
在PHP中修补XSS漏洞,我们可以使用三个PHP函数。
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的""与""符号转换成"" 与"gt;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code:
?
// 这里的代码主要用于展示这两个函数之间输出的不同
$input = 'scriptalert(1);/script';
echo htmlspecialchars($input) . 'br /';
echo htmlentities($input);
?
htmlentities()的另一个例子
PHP Code:
?php
$str = "A 'quote' is bbold/b";
echo htmlentities($str);
echo htmlentities($str, ENT_QUOTES);
?
第一个显示: A 'quote' is bbold/b
第二个显示:A 'quote' is bbold/b
htmlspecialchars()使用实例
PHP Code:
?php
$new = htmlspecialchars("a href='test'Test/a", ENT_QUOTES);
echo $new;
?
显示: a href='test'Test/a
strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:i, b 或p.
strip_tags()使用实例
PHP Code:
?php
$text = 'pTest paragraph./p!-- Comment -- Other text';
echo strip_tags($text);
echo "\n";
// allow p
echo strip_tags($text, 'p');
?
现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。
首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:
PHP Code:
function search($query, $page)
{
global $db, $bgcolor2, $bgcolor4, $sitename, $io_db, $module_url, $list_page_items, $hm_index;
$option = trim($option);
$query = trim($query);
$query = FixQuotes(nl2br(filter_text($query)));
$db-escape_string($query);
$db-escape_string($option);
alpha_search($query);
...
在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数:
PHP Code:
$query = FixQuotes(nl2br(filter_text(htmlentities($query))));
如果你对这三种函数还有有疑问可以使用PHP手册来查看: