转自:http://www.cnblogs.com/ggbd-lie/p/3265421.html
对数据的操作最基本的是增删改查,file_put_contents以及file_get_contents是对文件里的数据进行存入与取出。
先上代码:
<?php
$str
=
'hello world'
;
if
(
file_put_contents
(
'01.txt'
,
$str
)){
echo
'数据存入成功'
,
'<br />'
;
}
else
{
echo
'数据存入失败'
,
'<br />'
;
}
//返回的是:数据存入成功
//原来相应的目录下是没有这个文件的
//现在有这个文件了
//从这里可以看出,如果没有这个文件的话
//调用file_put_contents方法会自动创建这样的一个文件
//然后把数据存入
echo
file_get_contents
(
'01.txt'
),
'<br />'
;
//返回hello world
//把这个文件里的数值读出来
//如果file_get_contents是要读一个不存在的文件
//那么会报错,要读的文件一定要存在的
if
(
file_put_contents
(
'01.txt'
,
'new data to be insert'
)){
echo
'数据存入成功2'
,
'<br />'
;
}
else
{
echo
'数据存入失败2'
,
'<br />'
;
}
echo
file_get_contents
(
'01.txt'
),
'<br />'
;
//返回new data to be insert
//说明用file_put_contents方法只能对数据进行替换
//而不能在原来的基础上进行添加
?>
|
在用户登录或者查询数据等时候有些时候可能会有引号等对sql语句有影响的符号(sql注入攻击),这样等对他们进行数据库里的操作的时候会有影响,
这种情况应该怎么办呢?
答:可以用addslashes 和 stripslashes
addslashes是可以使单引号(,),双引号("),反斜线(\)与NULL(NULL字符)加上反斜线进行转义
stripslashes是与addslashes相对的一个方法,是把这些转义过的,还原
如下代码:
<?php
$str
=
'abcdfjaslffdfa"jflsadj'
;
if
(
file_put_contents
(
'01.txt'
,
$str
)){
echo
'数据存入成功'
,
'<br />'
;
}
else
{
echo
'数据存入失败'
,
'<br />'
;
}
echo
file_get_contents
(
'01.txt'
),
'<br />'
;
//返回abcdfjaslffdfa"jflsadj
$str
=
addslashes
(
$str
);
if
(
file_put_contents
(
'01.txt'
,
$str
)){
echo
'数据存入成功2'
,
'<br />'
;
}
else
{
echo
'数据存入失败2'
,
'<br />'
;
}
echo
file_get_contents
(
'01.txt'
),
'<br />'
;
//返回 abcdfjaslffdfa\"jflsadj
//经过转义
echo
stripslashes
(
file_get_contents
(
'01.txt'
)),
'<br />'
;
//返回abcdfjaslffdfa"jflsadj
//对转义字符串进行还原
?>
|
这种情况很多都是在用户进行表单输入的时候,后台处理的时候用
有些PHP版本magic_quotes_gpc这个配置是有用的,即自动魔术引号,即如果这个配置开启的话,$_POST ,$_COOKIE,$_SESSION这些值会自动进行转义,就不需要我们来转义
这种情况下怎么办呢?
答:为了兼容性和移植性,我们要对他进行判断,
看如下代码:
<?php
$textarea
=
$_POST
[
'textarea'
];
if
(get_magic_quotes_gpc()){
echo
'魔术引号以开启,$textarea不需要转义'
,
'<br />'
;
}
else
{
echo
'魔术引号未开启,$textarea需要转义'
,
'<br />'
;
$textarea
=
addslashes
(
$textarea
);
}
?>
|
我们来看下面一个例子:
这是在网站里经常碰到的
先是一个form表单里填写数据,然后提交到php页面进行处理,然后对数据进行显示
form表单代码如下
<html>
<head>
</head>
<body>
<form action="01.php" method="post">
<div>
<label for="name">Text Input:</label>
<input type="text" name="name" id="name" value="" tabindex="1" />
</div>
<div>
<label for="textarea">Textarea:</label>
<textarea cols="40" rows="8" name="textarea" id="textarea"></textarea>
</div>
<div>
<input type="submit" value="Submit" />
</div>
</form>
</body>
</html>
php处理页面,即01.php代码如下:
<?php
file_put_contents('01.txt', $_POST['textarea']);
echo file_get_contents('01.txt'),'<br />';
?>
如果在form表单的textarea控件里面输入
<script type="text/javascript">
while (true) {
alert('a');
};
</script>
就会无限弹出a,,而更有甚至利用这个漏洞,执行一些操作,如document.cookie等等
这种行为叫做XSS攻击
什么叫做XSS攻击呢?这种情况又该怎么办呢?
答:XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。
我们可以用htmlspecialchars方法,即html实体转义,即<>等这些html符号,都会被转化,那么当打印出来的时候,只会当他们是文字,而不是脚本了
<?php
file_put_contents('01.txt', htmlspecialchars($_POST['textarea']));
echo file_get_contents('01.txt'),'<br />';
//返回<script type="text/javascript"> while (true) { alert('a'); }; </script>
?>
与htmlspecialchars方法相对的是htmlspecialchars_decode