首 页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 尾 页

PHP应用程序开发中不正当使用mail()函数

发布者: superzhang | 发布时间:2017-12-15

一、前言

在我们挖掘PHP应用程序漏洞的过程中,我们向著名的Webmail服务提供商Roundcube提交了一个远程命令执行漏洞(CVE-2016-9920)。该漏洞允许攻击者通过利用Roundcube接口发送一个精心构造的电子邮件从而在目标系统上执行任意命令。在我们向厂商提交漏洞,发布了相关的漏洞分析文章后,由于PHP内联函数mail()导致的类似安全问题在其他的PHP应用程序中陆续曝出。在这篇文章中,我们将分析一下这些漏洞的共同点,那些安全补丁仍然存在问题,以及如何安全的使用mail()函数。

PHP应用程序开发中不正当使用mail()函数

二、浅析PHP的mail()函数

PHP自带了一个内联函数mail()用于在PHP应用程序中发送电子邮件。开发者可以通过使用以下五个参数来配置邮件发送。

bool mail( string $to, string $subject, string $message [, string $additional_headers [, string $additional

想读更多 ->

PHP输入输出控制函数之flush和ob_flush

发布者: superzhang | 发布时间:2017-12-15

PHP输入输出控制函数是PHP初学者必须要掌握的一个知识点,很多人刚开始的时候都分不清到底flush和ob_flush有什么区别?为什么PHP要提供两个将缓冲区的内容输出的函数?许多人都建议,不管你理解不理解,都要两个一起调用,同时是要按这样的顺序一起调用。

ob_flush();

flush();

结合官方文档和相关资料,ob_flush是发送用户(程序员)自定义的缓冲内的内容数据,而flush则是发送php自身的缓冲区的内容数据。这应该是最重要最大的区别了。不管你知道不知道,注意没注意,你可能在代码中调用了多次ob_start函数,其实这已经创建了多个输出缓冲区,这些缓冲区构成了一个缓冲区堆栈,最新创建的缓冲区就是当前缓冲区。每调用一次ob_flush就会将当前缓冲区的内容输出到上一层缓冲区,依次类推。最后才回到php缓冲区。所以上面的代码说要按顺序来调用,不然可能出现意想不到的结果。你可以简单理解成ob_flush 将缓冲内容发送到flush,而flush将缓冲内容发给客户端(浏览器),尽管实际上情况可能要比这复杂多了。

此外,ob_flush还受到php的配置选项output_buffering(默认是4069字符)的影响,如果缓冲区的内容没达到这个阀值,调用了ob_flush也没作用。而flush则不受此限制。另外这两

想读更多 ->

PHP基础-08-字符串变量(函数)详解

发布者: superzhang | 发布时间:2017-12-15

在我的文章『PHP基础-04-PHP变量』中已经介绍过PHP的几个常用类型变量,由于字符串变量经常用到,所以在此详细讲解一下。

PHP基础-08-字符串变量(函数)详解

并置运算符

在PHP中,只有一个字符串运算符:并置运算符『.』。有关运算符的内容我们将在稍后的文章中进行讲解。

我们可以叫并置运算符为『点连接』,毕竟它用来将若干个字符串连接起来,我一直这么叫。不具有权威性,只是本人习惯性叫法,请悉知。

并置运算符使用实例:连接若干个字符串

PHP基础-08-字符串变量(函数)详解

echo()函数

echo 用来输出一个或多个字符串

echo 比print稍快

echo 没有返回值

语法:

echo(

想读更多 ->

PHP基础学习9.函数入门2

发布者: superzhang | 发布时间:2017-12-15

上节讲解了函数的概念,使用,调用等等,接下来,我们用函数做一些比较深入的东西,话不多说,直接看代码吧!!

PHP基础学习9.函数入门2

用函数实现模拟入栈出栈

PHP基础学习9.函数入门2

入栈出栈效果

对,你没有看错,我们使用了函数内的一个重要特性:静态变量!这个东西非常神奇,能够自动记忆式的记录上次函数被调用之后该变量的状态,也就形成了一种有记忆性质的变量,这种变量就能让我们区分并完成多次函数调用达到的效果。入栈出栈的这个例子很简单,但是又很深刻,能贴切形象的勾勒出静态变量的使用,作用等。

在我们大部分函数调用中,出了简单涉及计算过滤等工具类函数外,静态变量的使用率也非常高,

想读更多 ->

PHP基础学习8.函数入门1

发布者: superzhang | 发布时间:2017-12-15

函数,对拥有编程基础的人而言是一个并不陌生的词汇。在C语言刚入门学习的时候,老师要求我们写函数来识别某个数是否是奇数偶数,判断三个数中谁最大谁最小,输出一个数的逆序数(12345变成54321),判断某个数是否是水仙花数,对一组数据进行排序等等,总之都是为了让我们用一段代码的指令集合实现某个特殊或者明确的功能,百度百科中这样解释:

函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。

一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。

在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。

函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。

我们可以看到,这里百度百科讲解的非常详细,能够做某件事情(有些过于白话文了)的程序称为函数,或者方法。

很多人懵了,函数和方法有什么区别吗?

事实上,在面向过程或函

想读更多 ->

php 单例模式

发布者: superzhang | 发布时间:2017-12-15

<?php/*** 单例模式* 1、该类只能有一个实例* 静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。* 2、在大量实例化new操作,会大量消耗系统资源和内存,因此可以将实例化的对象放在一个静态资源里,达到之实例化一次的效果** 创建该实例需要注意:* 1、有一个可以将实例后的类保存在一个静态变量中下次访问,可以直接使用该类,从而不用再去实例化 占用资源,该类故而要使用私有静态变量* ,private $_instance* 2、该类要防止初始化和克隆该类,因此使用private 私有的构造函数和克隆函数* 3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)*/Class Db{private static $_instance;// 防止外界实例化对象private function __construct() {echo '--------数据库连接--------'; }// 防止外部克隆private function __clone() {// TODO: Implement __clone() method.echo '

想读更多 ->

碎片化学习-PHP时间函数

发布者: superzhang | 发布时间:2017-12-15

今天有空整理一下PHP时间相关函数的使用

碎片化学习-PHP时间函数

strtotime

strtotime()预期接受一个包含美国英语日期格式的字符串并尝试将其解析为Unix时间戳

<?phpecho strtotime("now"), "\n";//1488259922echo strtotime("10 September 2000"), "\n";// 968536800echo strtotime("+1 day"), "\n";//1488346322echo strtotime("+1 week"), "\n";//1488864722echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";//1489051924echo strtotime("next Thursday"), "\n";//1488409200echo strtotime("last Monday"), "\n";//1488150000?>

DEMO:

<?php

想读更多 ->

闭包!什么是JS中的闭包,什么是PHP中的闭包函数?

发布者: superzhang | 发布时间:2017-12-15

JS的闭包:

所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

先看下下面这段代码

闭包!什么是JS中的闭包,什么是PHP中的闭包函数?

这段代码有两个特点:1、函数b嵌套在函数a内部;2、函数a返回函数b。

这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

①这里首先得说下JS的垃圾回收机制:

在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

②闭包有什么作用呢?

想读更多 ->

JavaScript模式之函数总结

发布者: superzhang | 发布时间:2017-12-15

JavaScript模式之函数总结

1.函数声明和命名函数表达式的区别:提升行为。

对于所有的变量,无乱在函数体的何处声明,变量声明都会在后台被提升到函数顶部,变量定义不会提升。

而这对于函数同样适用,因为函数也是分配给变量的对象。与变量声明提升区别:函数定义也被提升,而不仅仅是函数声明被提升。

//反模式

//仅用于演示

//全局函数

function foo() {

console.log('global foo');

}

function bar() {

console.log('global foo');

}

function hoistMe() {

console.log(typeof foo);// 输出'function'

console.log(typeof bar);// 输出'undefined'

foo();// 输出'local fo

想读更多 ->