PHP的安全性问题,你能说得上几个?

PHP的安全性问题,你能说得上几个?

一、SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.

例如:

<form action="sqlzhuru.php" method="post">
<input type="text" name="uid" />
<input type="submit" value="提交" />
</form>

sqlzhuru.php
<?php
include("../DB.class.php");
$db = new DB();
$uid = $_POST["uid"];
$sql = "select * from users where uid = '{
   $uid}'";
echo $sql;
var_dump($db->Query($sql));

 

PHP的安全性问题,你能说得上几个?

 

 

这样就可以查到所有信息,解决方法:

1. 手动检查每一条数据是否为正确的数据类型,自己写一个方法来过滤提交数据

2.系统自带的一个方法:mysql_real_escape_string()过滤数据,但该方法在未来版本会淘汰

<?php
include("../DB.class.php");
$db = new DB();
$uid = $_POST["uid"];
$uid = mysql_real_escape_string($uid); //系统自带过滤方法,但已经过时了
$sql = "select * from users where uid = '{
   $uid}'";
echo $sql;
var_dump($db->Query($sql));

3.使用PDO预处理

二、XSS攻击

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

例如:

<form action="xssgongji.php" method="post">
<input type="text" name="test" />
<input type="submit" value="提交" />
</form>

处理页面

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

若用IE浏览器打开test页面:

PHP的安全性问题,你能说得上几个?

 

因为IE没有过滤方法,会弹出弹窗,而像谷歌、火狐、360等浏览器会屏蔽掉,不会弹出弹窗。

解决方法:

1.自己写一个方法屏蔽xss攻击,过滤字符串

2.系统自带方法解决

<?php
/**屏蔽xss攻击方法
 * @blog http://www.phpddt.com
 * @param $string
 * @param $low 安全别级低
 */
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] );
    }
}
//just a test
$str = 'phpddt.com<meta http-equiv="refresh" content="0;">';
clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
echo $str;
?>

 三、CSRF攻击

CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

例如:

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

处理页面:

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

 

打开csrf.php页面:

    PHP的安全性问题,你能说得上几个?

 

这种get传值方式会在地址栏显示提交数据,在不关闭页面的情况下,再做一个页面,把地址复制进去

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

这样请求这个页面,也会将数据库中数据改掉:

PHP的安全性问题,你能说得上几个?

 

而如果改成POST方式,可以减少这种情况,也可以在表单中用隐藏域多提交一条数据,例如:

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

处理页面:

<?php
session_start();
include("../DB.class.php");
$db = new DB();

if(empty($_SESSION["uid"]))
{
    echo "未登录";    
}
else
{
    $uid =md5($_SESSION["uid"]);
    $str = $_POST["xinxi"];    
    if($uid == $str)
    {
        $qian = $_POST["qian"];    
        $sql = "update login set account = account-{
   $qian} where username = '{
   $_SESSION['uid']}'";
        echo $sql;
        $db->Query($sql,1);
    }
}

但是这种方式也不能完全避免CSRF攻击,即使用MD5加密,也还是有人可以解出来,最好的方法还是使用验证码。你不知道验证码是怎么生成的,就无法进行CSRF攻击。

SQL注入只需过滤提交的字符串即可,XSS攻击用PDO预处理,CSRF攻击用验证码就可解决。

有些黑客会伪造FILE数组上传,如何辨别:move_upload_file()可以判断是不是真实文件。

以后做项目,有关安全性的地方一定要谨慎,千万不要轻易相信用户上传或提交的任何数据,一定要进行正确处理。

https://mp.weixin.qq.com/s/QRQ5Jp8sZa2cFdIY-t897Q

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112807.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 少儿编程mta证书_少儿编程项目计划书

    少儿编程项目计划书未来30年是人工智能的伟大时代,学编程会让孩子的未来充满更多可能性。此项目是针对小学生,主要是以培养学习兴趣,接受最基本的编程概念,并能够通过学到的知识完成一些小的课题,激发和培养学生的编程思维。在学习的过程中,主要通过实体的编程玩具,学会构建自己的作品,比如学习编程语言,机器人等课程。本项目提供多维度的少儿编程培训服务,包括编辑机器人研发、在线编程教育培训、线下培训等。一、线下…

    2022年4月8日
  • 不借助任何工具将CLOVER引导添加进UEFI的正确姿势(简单暴力版本)「建议收藏」

      经常安装hackintosh的同学会发现,安装完macOS后,需要做的第一件事情就要将EFI移进机器自带的磁盘中,同时添加CLOVER引导项到UEFI中以实现CLOVER引导加载macOS。通常的作法是进Windows/PE工具里,使用类似EASYUEFI或者BOOTICE之类的工具添加一条引导记录到UEFI中。现在教给大家一招:不借助任何工具,使用CLOVER自带的功能添加一个…

    2022年4月8日
  • python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」

    python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。一、关于m3u8:(https://blog.csdn.net/baidu_34418350/article/details/64922512)m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过编码方式是utf-8,是一种…

    2022年6月30日
  • 在flask中使用jsonify和json.dumps的区别

    在flask中使用jsonify和json.dumps的区别flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象,那么在flask的视图函数中return它们会有什么不同之处呢?想必开始很多人和我一样搞不清楚,只知道既然框架提供了方法就用,肯定不会错。但作为开发人员,我们需要弄清楚开发过程中各种实现方式的特点和区别,这样在我们面对不同的需求时才能做出相对合理的选择,而

    2022年5月24日
  • LoadRunner教程(15)-LoadRunner 初识Analysis

    LoadRunner教程(15)-LoadRunner 初识Analysisanalysis简介分析器就是对测试结果数据进行分析的组件,它是LR三大组件之一,保存着大量用来分析性能测试结果的数据图,但并不一定要对每个视图进行分析,可以根据实际情况选择相关的数据视图进行分析,分析结果可以生成一些不同格式的测试报告,可以对不同的图表进行合并分析。在controller里面点击analysis,可以生成分析图表或者在开始运行场景时…

    2022年5月23日
  • 【JVM调优工具】JVM调优工具[通俗易懂]

    【JVM调优工具】JVM调优工具[通俗易懂]一、JVM调优工具1.jstat工具java程序默认使用的xmx_为什么JAVA进程占用内存会超过Xmx设置_保瓶儿的博客-CSDN博客

    2022年5月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号