WEB/APP开发安全

2016-04-26 14:39:10 查看评论 2067 人阅读    

最近公司被攻击了,然后才发现公司代码简直一点安全防范意识都没有,连基本的SQL,XSS过滤都没有,发现大部分PHP程序员都缺乏安全相关的了解。下面就我们遇到的一些攻击进行科普以及防范方案。

SQL注入

SQL注入是WEB攻击中最常见的注入方式。也是我们这次被攻击中最多的。
由于我们的程序中大部分都是进行拼装SQL的方式,然后对于用户输入的参数也没有进行过滤,导致给攻击者留下了漏洞。
具体为,登录的操作,一般是通过POST方式将username和password传递过来。

SELECT * FROM user WHERE username='$username' AND password='$password'


正常情况下,我们希望执行的SQL是

SELECT * FROM user WHERE username='vckai' AND password='123456'


但是如果攻击者传递的用户为非法用户名vckai' or 1=1--,在SQL里面—是注释标记,所以查询语句会在此中断。这就让攻击者在不知道任何合法用户名和密码的情况下成功登录了。

SELECT * FROM user WHERE username='vckai' or 1=1--' AND password='123456'


甚至于,攻击者可以用同样的方式执行其他SQL,查询出你其他DB和表数据。

现在知道SQL注入的危害了,那怎么预防呢?

  • 首先在PHP中,首先对于int类型的数据,一定要在接收数据的时候进行(int) $_POST['pagesize']进行强转义。

  • 根据业务做参数验证,如用户名一般只允许4-20位字符和数字。这样攻击者就没办法根据这个进行注入了。

  • 虽然MySQL和PHP本身由提供过滤函数addslashesmysql_real_escape_string进行转义,但是仍然有被绕过的风险,所以最佳方法是使用PDO的预处理。详情见:使用PDO防止SQL注入

[转] 浅谈PHP弱类型安全

2016-04-20 21:27:57 查看评论 575 人阅读    

0x00 弱类型初探


没有人质疑php的简单强大,它提供了很多特性供开发者使用,其中一个就是弱类型机制。

在弱类型机制下 你能够执行这样的操作

1
2
3
4
5
<?php
$var = 1;
$var = array();
$var = "string";
?>

php不会严格检验传入的变量类型,也可以将变量自由的转换类型。

比如 在$a == $b的比较中

  • $a = null; $b = false; //为真

  • $a = ''; $b = 0; //同样为真

然而,php内核的开发者原本是想让程序员借由这种不需要声明的体系,更加高效的开发,所以在几乎所有内置函数以及基本结构中使用了很多松散的比较和转换,防止程序中的变量因为程序员的不规范而频繁的报错,然而这却带来了安全问题。

分类: PHP 标签: 弱类型 安全