Maison > php教程 > PHP源码 > 简单的 php 防注入、防跨站 函数

简单的 php 防注入、防跨站 函数

大家讲道理
Libérer: 2016-11-08 11:06:10
original
1448 Les gens l'ont consulté

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

function fn_safe($str_string) {

    //直接剔除

    $_arr_dangerChars = array(

        "|", ";", "$", "@", "+", "\t", "\r", "\n", ",", "(", ")", PHP_EOL //特殊字符

    );

  

    //正则剔除

    $_arr_dangerRegs = array(

        /* -------- 跨站 --------*/

  

        //html 标签

        "/<(script|frame|iframe|bgsound|link|object|applet|embed|blink|style|layer|ilayer|base|meta)\s+\S*>/i",

  

        //html 属性

        "/on(afterprint|beforeprint|beforeunload|error|haschange|load|message|offline|online|pagehide|pageshow|popstate|redo|resize|storage|undo|unload|blur|change|contextmenu|focus|formchange|forminput|input|invalid|reset|select|submit|keydown|keypress|keyup|click|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|mousedown|mousemove|mouseout|mouseover|mouseup|mousewheel|scroll|abort|canplay|canplaythrough|durationchange|emptied|ended|error|loadeddata|loadedmetadata|loadstart|pause|play|playing|progress|ratechange|readystatechange|seeked|seeking|stalled|suspend|timeupdate|volumechange|waiting)\s*=\s*(\"|&#39;)?\S*(\"|&#39;)?/i",

  

        //html 属性包含脚本

        "/\w+\s*=\s*(\"|&#39;)?(java|vb)script:\S*(\"|&#39;)?/i",

  

        //js 对象

        "/(document|location)\s*\.\s*\S*/i",

  

        //js 函数

        "/(eval|alert|prompt|msgbox)\s*\(.*\)/i",

  

        //css

        "/expression\s*:\s*\S*/i",

  

        /* -------- sql 注入 --------*/

  

        //显示 数据库 | 表 | 索引 | 字段

        "/show\s+(databases|tables|index|columns)/i",

  

        //创建 数据库 | 表 | 索引 | 视图 | 存储过程 | 存储过程

        "/create\s+(database|table|(unique\s+)?index|view|procedure|proc)/i",

  

        //更新 数据库 | 表

        "/alter\s+(database|table)/i",

  

        //丢弃 数据库 | 表 | 索引 | 视图 | 字段

        "/drop\s+(database|table|index|view|column)/i",

  

        //备份 数据库 | 日志

        "/backup\s+(database|log)/i",

  

        //初始化 表

        "/truncate\s+table/i",

  

        //替换 视图

        "/replace\s+view/i",

  

        //创建 | 更改 字段

        "/(add|change)\s+column/i",

  

        //选择 | 更新 | 删除 记录

        "/(select|update|delete)\s+\S*\s+from/i",

  

        //插入 记录 | 选择到文件

        "/insert\s+into/i",

  

        //sql 函数

        "/load_file\s*\(.*\)/i",

  

        //sql 其他

        "/(outfile|infile)\s+(\"|&#39;)?\S*(\"|&#39;)/i",

    );

  

    $_str_return = $str_string;

    //$_str_return = urlencode($_str_return);

  

    foreach ($_arr_dangerChars as $_key=>$_value) {

        $_str_return = str_ireplace($_value, "", $_str_return);

    }

  

    foreach ($_arr_dangerRegs as $_key=>$_value) {

        $_str_return = preg_replace($_value, "", $_str_return);

    }

  

    $_str_return = htmlentities($_str_return, ENT_QUOTES, "UTF-8", true);

  

    return $_str_return;

}

Copier après la connexion

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal