一、防sql注入

用户通过输入完整的字符,来和sql语句拼接成带有破坏性的sql语句,服务器执行该语句,造成破坏。

1使用mysql_real_escape_string()过滤数据,该方法在未来版本会淘汰

<body>
<form action="chuli.php" method="post">
<div>
<input type="test" name="uid"/>
</div>
<input type="submit" value="提交"/>
</form>
</body>

  

<?php
include("../DBDA.class.php");
$db=new DBDA(); $uid=$_POST["uid"]; $uid=mysql_real_escape_string($uid);//过滤数据,但是以后会移除该方法 $sql="select * from user where uid='{$uid}'";
echo $sql;
var_dump($db->Query($sql));

  

2、使用PDO预处理语句

二、xss攻击

1、演示

<body>
<form action="chuli.php" method="post">
<div>
<input type="test" name="uid"/>
</div>
<input type="submit" value="提交"/>
</form>
</body>
</html>

  

<?php
include("../DBDA.class.php");
$db=new DBDA(); echo $_POST["uid"];

  

2、用户在表单里输入恶意的代码(主要是js代码),来破坏网站页面,例如不断刷新页面的js代码

解决方式为过滤字符串

3、防止一:php自带方法是使用htmlspecialchars()函数

4、防止二:写一个过滤输入内容的方法

function clean_xss(&$string, $low = False)
{
if (! is_array ( $string ))
{
$string = trim ( $string );
$string = strip_tags ( $string );
$string = htmlspecialchars ( $string );
if ($low)
{
return True;
}
$string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string );
$no = '/%0[0-8bcef]/';
$string = preg_replace ( $no, '', $string );
$no = '/%1[0-9a-f]/';
$string = preg_replace ( $no, '', $string );
$no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
$string = preg_replace ( $no, '', $string );
return True;
}
$keys = array_keys ( $string );
foreach ( $keys as $key )
{
clean_xss ( $string [$key] );
}
}

 

$str = $_POST["uid"];
clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
echo $str;

  

//$str = 'phpddt.com<meta http-equiv="refresh" content="0;">';//将此代码输入到表单里,如果不使用clean_xss()方法,会造成不断刷新网页

 

三、CSRF攻击(跨站请求伪造,XSRS)

1、可以理解为攻击者盗用你的身份,以你的名义发送恶意请求

2、演示

例如,一个人员(uid=“lisi”)登陆账户,此用户进行转账或消费活动

<title>无标题文档</title>
<?php
session_start();
$_SESSION["uid"]="lisi";
?>
</head> <body>
<form action="csrfcl.php" method="get">
<div><input type="text" name="qian"/></div>
<input type="submit" value="提交"/>
</form>
</body>

  

后端处理代码

<?php
session_start();
include("../DBDA.class.php");
$db = new DBDA(); if(empty($_SESSION["uid"]))
{
echo "未登录";
}
else
{
$qian=$_REQUEST["qian"];
$sql="update login set account = account-{$qian} where username='{$_SESSION['uid']}'";
echo $sql;
$db->Query($sql,1);
}

  这样操作下来是一个合理的流程。

但是,转账或消费完之后,不关闭此页面,将页面地址栏出的地址信息全部复制下来,例如:http://localhost/anquan/csrfcl.php?qian=100

再之后,自己新建一个页面,里面代码如下:

<body>
<img src="http://localhost/anquan/csrfcl.php?qian=100"/>
</body>

  最后,刷新此页面,账户中的余额会发生变化。

3、以上讲解,表单是以get形式传值,如果表单以post形式提交,CSRF攻击将以以下形式进行

<?php
session_start();
$_SESSION["uid"]="lisi";
?>
</head> <body>
<form action="csrfcl.php" method="post">
<div><input type="text" name="qian"/></div>
<input type="submit" value="提交"/>
</form>
</body>

  

<?php
session_start();
include("../DBDA.class.php");
$db = new DBDA(); if(empty($_SESSION["uid"]))
{
echo "未登录";
}
else
{
$qian=$_POST["qian"];
$sql="update login set account = account-{$qian} where username='{$_SESSION['uid']}'";
echo $sql;
$db->Query($sql,1);
}

  以上操作和get形式差不多,只不过提交方式不同,所以攻击方式为新建一个没有session的表单

<body>
<form action="csrfcl.php" method="post">
<div><input type="text" name="qian"/></div>
<input type="submit" value="提交"/>
</form>
</body>

 

解决思路是让伪造的表单不能使用

 

4、解决方法是在前端表单进行加密

<?php
session_start();
$_SESSION["uid"]="lisi"; $str=md5($_SESSION["uid"]);//加密
?>
</head> <body>
<form action="csrfcl.php" method="post">
<input type="hidden" value="<?php echo $str ?>" name="xinxi"/>//隐藏的加密信息
<div><input type="text" name="qian"/></div>
<input type="submit" value="提交"/>
</form>
</body>

 后端服务器代码加密信息匹配

<?php
session_start();
include("../DBDA.class.php");
$db = new DBDA(); if(empty($_SESSION["uid"]))
{
echo "未登录";
}
else
{
$str=$_POST["xinxi"]; $ck=md5($_SESSION["uid"]); if($str=$ck)
{
$qian=$_POST["qian"];
$sql="update login set account = account-{$qian} where username='{$_SESSION['uid']}'";
echo $sql;
$db->Query($sql,1);
}
}

  

5、另一种解决方法是加验证码(最重要的)

PHP安全性的更多相关文章

  1. WCF之安全性

    WCF 客户端代理生成 通过SvcUtil.exe http://www.cnblogs.com/woxpp/p/6232298.html WCF 安全性 之 None http://www.cnbl ...

  2. 线程安全性:num++操作为什么也会出问题?

    线程的安全性可能是非常复杂的,在没有充足同步的情况下,由于多个线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果(非预期的).下面的Tools工具类的plus方法会使计数加一,为了方便,这里的nu ...

  3. WebApi安全性 使用TOKEN+签名验证

    首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题, ...

  4. 数据库---实验四 oracle的安全性和完整性控制

    实验内容: (一) 授权 . 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by &q ...

  5. 关于i++引出的线程不安全性的分析以及解决措施

    Q:i++是线程安全的吗? A:如果是局部变量,那么i++是线程安全. 如果是全局变量,那么i++不是线程安全的. 理由:如果是局部变量,那么i++是线程安全:局部变量其他线程访问不到,所以根本不存在 ...

  6. 如何解决例如i++的线程不安全性

    AtomicBoolean.AtomicInteger.AtomicLong.AtomicReference 各种原子性关键字,可以解决比如i++的线程不安全性的因素

  7. RESTful Api 身份认证安全性设计

    REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...

  8. SalesForce 记录级别安全性

    对象级安全性 简档 对象级安全性提供了控制 Salesforce.com 中数据的最简单方式.使用对象级安全性 您可以防止用户查看.创 建.编辑或删除特殊类型对象的任何实例 如潜在客户或业务机会.对象 ...

  9. Atitit.安全性方案规划设计4gm  v1 q928

    Atitit.安全性方案规划设计4gm  v1 q928 1. 安全架构设计与功能安全检测1 2. https1 3. 账号安全体系1 4. 配置文件安全 1 5. 源码加密与安全2 6. 最高强度的 ...

  10. 【学习篇:他山之石,把玉攻】Ajax请求安全性讨论

    在开发过程中怎样考虑ajax安全及防止ajax请求攻击的问题. 先上两段网摘: Ajax安全防范的方法: 判断request的来源地址.这样的方式不推荐,因为黑客可以更改http包头,从而绕过检测. ...

随机推荐

  1. osg 路径 动画 效果

    osg 路径 动画 效果 转自:http://blog.csdn.net/zhuyingqingfen/article/details/8248157 #include <osg/Group&g ...

  2. as3如何做出残影效果

    在页游中,时不时能看到人物做一些快速移动动作如冲刺时,有残影效果,强化了画面表现.实际人肉眼之所以能看到残影的效果,是因为观察到的物体会在人视线中残留几十毫秒时间,当运动物体运动太快时,人肉眼所见未能 ...

  3. [LintCode] Maximal Rectangle 最大矩形

    Given a 2D boolean matrix filled with False and True, find the largest rectangle containing all True ...

  4. 【hihoCoder】1041. 国庆出游

    问题:详见http://hihocoder.com/problemset/problem/1041 有n个城市,城市编号为1-n,城市间有n-1条路(所以,城市路网是一棵树).给定一个序列S,要求判断 ...

  5. zk jquery的使用

    jQuery_effects.zul: <?page title="Jquery" contentType="text/html;charset=UTF-8&quo ...

  6. 模拟实现ORM实例

    https://git.oschina.net/wenjieyatou/hibernate_OR_Mapping 请参考git代码.基本原理是自己写了一个session,然后用反射机制模拟数据库存储机 ...

  7. Excel报表开发

    读取Excel数据 /// <summary> /// 封装方法 /// </summary> /// <param name="path">& ...

  8. Web前端开发基础 第四课(盒代码模型)

    盒模型代码简写 还记得在讲盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左.具体应用在margin和paddin ...

  9. BizTalk开发系列(二十三) BizTalk性能指标参考

    BizTalk项目目前比较少,使用的客户也不多.大多只知道BizTalk是一个不错的产品,是Microsoft SOA平台的核心产品,不过还没有将其应用到生产环境.还有一些客户对BizTalk的性能不 ...

  10. 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步

    实验指导书及代码包下载: http://pan.baidu.com/s/1kVjeN2n iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...