1. <?php
  2. //参数处理函数
  3. function RepPostVar($val){
  4. //不考虑指令magic_quotes_gpc是否开启, 如果参数$val不等于addslashes($val)就退出
  5. if($val!=addslashes($val)){
  6. exit();
  7. }
  8. CkPostStrChar($val);
  9. $val=str_replace("%","",$val);//删除所有的百分号字符
  10. $val=str_replace(" ","",$val);//删除所有的空格
  11. $val=str_replace("\t","",$val);//删除所有的\t制表符
  12. $val=str_replace("%20","",$val);//删除所有的rawurlencode(" ")
  13. $val=str_replace("%27","",$val);//删除所有的rawurlencode("'")
  14. $val=str_replace("*","",$val);//删除所有的星号
  15. $val=str_replace("'","",$val);//删除所有的单引号
  16. $val=str_replace("\"","",$val);//删除所有的双引号
  17. $val=str_replace("/","",$val);//删除所有的正斜杠
  18. $val=str_replace(";","",$val);//删除所有的分号
  19. $val=str_replace("#","",$val);//删除所有的井号
  20. $val=str_replace("--","",$val);//删除所有的自减运算符
  21. $val=RepPostStr($val,1);
  22. $val=addslashes($val);
  23. //FireWall
  24. FWClearGetText($val);
  25. return $val;
  26. }
  27. //处理编码字符
  28. function CkPostStrChar($val){
  29. //返回参数$val最后一个字符串
  30. if(substr($val,-1)=="\\")
  31. {
  32. //如果参数$val最后一个字符等于反斜杠就退出
  33. exit();
  34. }
  35. }
  36. //addslashes 使用反斜线引用字符串
  37. //string addslashes(string $str)
  38. //返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号、双引号、反斜线与NUL(NULL字符)。
  39. function AddAddsData($data){
  40. //如果关闭了魔术引号,则addslashes
  41. if(!MAGIC_QUOTES_GPC){
  42. $data=addslashes($data);
  43. }
  44. return $data;
  45. }
  46. //string stristr(string $haystack, mixed $needle [,bool $before_needle=false])
  47. //返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串。
  48. //haystack 在该字符串中查找。
  49. //needle 如果needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。
  50. //before_needle 若为TRUE,将返回needle在haystack中的位置之前的部分(不包括needle)。
  51. //参数needle和haystack将以不区分大小写的方式对待。
  52. //返回匹配的子字符串,如果needle未找到,返回false。
  53.  
  54. //检查敏感字符
  55. function FWClearGetText($str){
  56. global $ecms_config;
  57. //开启防火墙(0为关闭,1为开启)
  58. if(empty($ecms_config['fw']['eopen'])){
  59. return '';
  60. }
  61. //屏蔽提交敏感字符,多个用半角逗号格开
  62. if(empty($ecms_config['fw']['cleargettext'])){
  63. return '';
  64. }
  65. $r=explode(',',$ecms_config['fw']['cleargettext']);
  66. $count=count($r);
  67. for($i=0;$i<$count;$i++){
  68. if(stristr($str,$r[$i])){
  69. FWShowMsg('Post String');
  70. }
  71. }
  72. }
  73. function FWShowMsg($msg){exit();}
  74. //处理提交字符
  75. function RepPostStr($val,$ecms=0){
  76. $val=ehtmlspecialchars($val,ENT_QUOTES);//既转换双引号也转换单引号
  77. if($ecms==0){
  78. CkPostStrChar($val);
  79. $val=AddAddsData($val);
  80. //FireWall
  81. FWClearGetText($val);
  82. }
  83. return $val;
  84. }
  85. //htmlspecialchars 将特殊字符转换为HTML实体
  86. //string htmlspecialchars(string $string [,int $flags=ENT_COMPAT | ENT_HTML401 [,string $encoding=ini_get("default_charset") [,bool $double_encode=true]]])
  87. //某类字符在HTML中有特殊用处,如需保持原意,需要用HTML实体来表达。本函数会返回字符转义后的表达。如需转换子字符串中所有关联的名称实体,使用htmlentities()代替本函数。
  88. //string 待转换的string
  89. //flags 位掩码,由以下某个或多个标记组成,设置转义处理细节、无效单元序列、文档类型。默认是ENT_COMPAT|ENT_HTML401。
  90. //有效的flags常量
  91. //ENT_COMPAT 会转换双引号,不转换单引号。
  92. //ENT_QUOTES 既转换双引号也转换单引号。
  93. //ENT_NOQUOTES 单/双引号都不转换。
  94. //ENT_IGNORE 静默丢弃无效的代码单元序列,而不是返回空字符串。不建议使用此标记,因为它可能有安全影响。
  95. //ENT_SUBSTITUTE 替换无效的代码单元序列为Unicode代替符,U+FFFD(UTF-8)或者&#xFFFD;(其他),而不是返回空字符串。
  96. //ENT_DISALLOWED 为文档的无效代码点替换为Unicode代替符(Replacement Character):U+FFFD(UTF-8)或&#xFFFD;(其他),而不是把它们留在原处。比如以下情况下就很有用:要保证XML文档嵌入额外内容时格式合法。
  97. //ENT_HTML401 以HTML 4.01处理代码
  98. //ENT_XML1 以XML 1处理代码
  99. //ENT_XHTML 以XHTML处理代码
  100. //ENT_HTML5 以HTML5处理代码
  101.  
  102. //htmlspecialchars()函数把预定义的字符转换为HTML实体
  103. //预定义的字符是:
  104. //&(和号)会被转换成&amp;
  105. //"(双引号)会被转换成&quot;
  106. //'(单引号)会被转换成&#039;
  107. //<(小于)会被转换成&lt;
  108. //>(大于)会被转换成&gt;
  109.  
  110. //支持的字符集列表
  111. //ISO-8859-1 西欧,Latin-1
  112. //ISO-8859-5 Little used cyrillic charset(Latin/Cyrillic)
  113. //ISO-8859-15 西欧,Latin-9。增加欧元符号,法语和芬兰语字母在Latin-1(ISO-8859-1)中缺失。
  114. //UTF-8 ASCII兼容的多字节8位Unicode。
  115. //cp866 DOS特有的西里尔编码。本字符集在4.3.2版本中得到支持。
  116. //cp1251 Windows特有的西里尔编码。本字符集在4.3.2版本中得到支持。
  117. //cp1252 Windows特有的西欧编码。
  118. //KOI8-R 俄语。本字符集在4.3.2版本中得到支持。
  119. //BIG5 繁体中文,主要用于中国台湾省。
  120. //GB2312 简体中文,中国国家标准字符集。
  121. //BIG5-HKSCS 繁体中文,附带香港扩展的Big5字符集。
  122. //Shift_JIS 日语
  123. //EUC-JP 日语
  124. //MacRoman Mac操作系统(Mac OS)使用的字符串。
  125.  
  126. //double_encode 可选,布尔值,规定了是否编码已存在的HTML实体。
  127. //TRUE 默认,将对每个实体进行转换。
  128. //FALSE 不会对已存在的HTML实体进行编码。
  129.  
  130. //返回编码后的字符,如果指定的编码encoding里,string包含了无效的代码单元序列,没有设置ENT_IGNORE或者ENT_SUBSTITUTE标记的情况下,会返回空字符串。
  131.  
  132. //更新日志
  133. //5.6.0 The default value for the encoding parameter was changed to be the value of the default_charset configuration option(配置选项)。
  134. //5.4.0 encoding参数的默认值改成UTF-8。
  135. //5.4.0 增加常量ENT_SUBSTITUTE、ENT_DISALLOWED、ENT_HTML401、ENT_XML1、ENT_XHTML、ENT_HTML5。
  136. //5.3.0 增加常量ENT_IGNORE。
  137. //5.2.3 增加参数double_encode。
  138.  
  139. function ehtmlspecialchars($val,$flags=ENT_COMPAT){//默认会转换双引号,不转换单引号。
  140. global $ecms_config;
  141. if(PHP_VERSION>='5.4.0'){
  142. if($ecms_config['sets']['pagechar']=='utf-8'){
  143. $char='UTF-8';
  144. }else{
  145. $char='ISO-8859-1';
  146. }
  147. $val=htmlspecialchars($val,$flags,$char);
  148. }else{
  149. $val=htmlspecialchars($val,$flags);
  150. }
  151. return $val;
  152. }
  153. ?>