php 过滤特殊字符及sql防注入代码
php 过滤特殊字符及sql防注入代码
<?php
//方法一
//过滤',",sql语名
addslashes();
//方法二,去除所有html标签
strip_tags();
//方法三过滤可能产生代码
function php_sava($str)
{
$farr = array(
"/s+/",
"/<(/?)(script|i?frame|style|html|body|title|link|meta|?|%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU",
);
$tarr = array(
" ",
"<\1\2\3>", //如果要直接清除不安全的标签,这里可以留空
"\1\2",
);
$str = preg_replace( $farr,$tarr,$str);
return $str;
}
//php sql防注入代码
class sqlin
{
//dowith_sql($value)
function dowith_sql($str)
{
$str = str_replace("and","",$str);
$str = str_replace("execute","",$str);
$str = str_replace("update","",$str);
$str = str_replace("count","",$str);
$str = str_replace("chr","",$str);
$str = str_replace("mid","",$str);
$str = str_replace("master","",$str);
$str = str_replace("truncate","",$str);
$str = str_replace("char","",$str);
$str = str_replace("declare","",$str);
$str = str_replace("select","",$str);
$str = str_replace("create","",$str);
$str = str_replace("delete","",$str);
$str = str_replace("insert","",$str);
$str = str_replace("'","",$str);
$str = str_replace(""","",$str);
$str = str_replace(" ","",$str);
$str = str_replace("or","",$str);
$str = str_replace("=","",$str);
$str = str_replace("%20","",$str);
//echo $str;
return $str;
}
//aticle()防SQL注入函数//php教程
function sqlin()
{
foreach ($_GET as $key=>$value)
{
$_GET[$key]=$this->dowith_sql($value);
}
foreach ($_POST as $key=>$value)
{
$_POST[$key]=$this->dowith_sql($value);
}
}
}
$dbsql=new sqlin();
?>
===================================================================================
使用方式:
将以上代码复制新建一个sqlin.php的文件,然后包含在有GET或者POST数据接收的页面
原理:
将所有的SQL关键字替换为空
本代码在留言本中不能使用,若要在留言本中使用请替换其中的
.......
$str = str_replace("and","",$str);
到
$str = str_replace("%20","",$str);
...
的代码为:
$str = str_replace("and","and",$str);
$str = str_replace("execute","execute",$str);
$str = str_replace("update","update",$str);
$str = str_replace("count","count",$str);
$str = str_replace("chr","chr",$str);
$str = str_replace("mid","mid",$str);
$str = str_replace("master","master",$str);
$str = str_replace("truncate","truncate",$str);
$str = str_replace("char","char",$str);
$str = str_replace("declare","declare",$str);
$str = str_replace("select","select",$str);
$str = str_replace("create","create",$str);
$str = str_replace("delete","delete",$str);
$str = str_replace("insert","insert",$str);
$str = str_replace("'","'",$str);
$str = str_replace(""",""",$str);
?>
str_replace只替换一次代码
$str ="中国|111cn.net|111cn.net|111cn.net|jkldajfklda李好,美女,世界中国中国中国
中国中国abc,dee";
$str1=array(
array('111cn.net','/phper.html'),
array('中国','/phper.html'),
array('李好','/phper.html'),
array('dee','/phper.html'),
array('abc','/phper.html')
);
//$temp = str_replace('111cn.net','前程似锦',$str,$a);
$count =0;
foreach($str1 as $nkeys){
if(strpos($str,$nkeys[0]) ){
if( $count <=1 ){
$str=preg_replace("/$nkeys[0]/","<a
href=http://111cn.net.com".$nkeys[1]." target=_blank >".$nkeys
[0]."</a>",$str,1); $count++;
continue ;
}
}
}
echo $count,$str;
//preg_replace(【要替换的关键字】, 【替换为的关键字】, 【原字符串】, 【替换次数
】);
//方法二:
function str_replace_once($needle, $replace, $haystack) {
$pos = strpos($haystack, $needle);
if ($pos === false) {
return $haystack;
}
return substr_replace($haystack, $replace, $pos, strlen($needle));
}
php简单数据保存程序
<form id="form1" name="form1" method="post" action="">
<label>
<input type="text" name="cname" />
</label>
<p>
<label>
<input type="text" name="caddress" />
</label>
<label>
<input type="text" name="ctel" />
</label>
<label>
<input type="text" name="cfix" />
</label>
<label>
<input type="text" name="cmail" />
</label>
</p>
</form>
<?php
include(dirname(__FILE__).'./inc/gg_function.php');
if( $_POST)
{
$_cname = Get_value('cname',1);
$_address = Get_value('caddress',1);
$_tel = Get_value('ctel',1);
$_fix = Get_value('cfix',1);
$_mail = Get_value('cmail',1);
if( empty($_cname) || strlen( $_cname )>200 )
{
ShowMsg('请输入公司名称!');
}
elseif( empty( $_address ) || strlen( $_address )>200 )
{
ShowMsg('请输入公司地址!');
}
elseif( empty( $_tel ) || strlen($_tel)>12 )
{
ShowMsg('请输入正确的电话号码');
}
elseif( empty($_fix) || strlen( $_fix )>20 )
{
ShowMsg('输入传真号');
}
elseif( empty( $_mail ) || strlen( $_mail )>254 )
{
ShowMsg('输入正确的邮件地址');
}
else{
$_sql = "Insert into gx_coo(c_name,c_address,c_tel,c_fix,c_maile)value('$_cname','$_address','$_tel','$_fix','$_mail')";
if( mysql_query( $_sql ) )
{
ShowMsg('信息保存成功!');
}
else
{
ShowMsg('操作失败请重试一次!');
}
}
}
?>
<%
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
SQL_injdata =":|;|>|<|--|sp_|xp_||dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
For SQL_Data=0 To Ubound(SQL_inj)
if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 Then
Response.Write "您的操作可能是SQL注入行为。"
Response.end
end if
next
%>
我自己觉得还有防sql注入的方法,那就是用trim()函数,去除所有querystring过来的值的空格,因为sql执行必须带有空格哦,还有如果是id类型的判断是否为数字就OK了。
好了为php开发者提供了一款php sql 防注入与字符过滤以及各种过滤代码哦。//==防注入自动过滤[启用后程序效率低]==========================================================================================
/*
function inject_checks($sql_str){return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);}
foreach ($_REQUEST as $value){if (inject_checks($value)){echo "<script language=javascript>alert('你提交的数据非法,请检查后重新提交!');</script>";exit;}}
*/
//==防注[inject_check($sql_str)]==========================================================================================
function inject_check($sql_str){
if (eregi('select|insert|update|delete|union|into|load_file|outfile', $sql_str)){echo "<script language=javascript>alert('你提交的数据非法,请检查后重新提交!');</script>";exit;}
return $sql_str;
}
//==字符过滤[safe_convert($string)]==============================================================================
function safe_convert($string){ //Words Filter
if(get_magic_quotes_gpc()){ //转义字符 加上反斜线
$string=htmlspecialchars($string, ENT_QUOTES); //将特殊字元转成HTML字串格式如 "&"转成"&"
$string=str_replace("<","<",$string); //替换
$string=str_replace(">",">",$string); //替换
$string=str_replace("\", '\', $string); //替换
} else {
$string=addslashes($string); //转义字符 加上反斜线 //$string=stripslashes($string); //去掉反斜线
$string=str_replace("\\", '\', $string);
}
//$string=str_replace("r","<br/>",$string); //换行
//$string=str_replace("n","",$string); //空格
$string=str_replace("t"," ",$string); //空格
$string=str_replace(" "," ",$string); //空格
//$string=str_replace('|', '|', $string); //替换 同分类系统有冲突
$string=str_replace("&#96;","`",$string); //替换
$string=str_replace("&#92;","\",$string); //替换
return $string;
}
//==字符反过滤[unsafe_convert($string)]==============================================================================
function unsafe_convert($string){ //Words Filter
$string=str_replace("\"",""",$string); //替换
return $string;
}
//==字符过滤[filter($string)]============================================================================================
function filter($string){ //Words Filter
include("Filter.php");//词汇过滤列表
foreach($badwords as $badword){
if(stristr($string,$badword)==true){echo "<script language=javascript>alert('警告:你提交的内容含有敏感字眼,请更换内容。');</script>";exit;}
}
return $string;
}
相关文章
- 方法一过滤html自定义函数 代码如下 复制代码 function ihtmlspecialchars($string) { if(is_array($string)) { foreach($string as $key =>...2016-11-25
- 今天用C#输出XML文件时,发现报错,经过反复检查调试,发现是因为某处内容含有某些特殊字符,这些特殊字符是在XML里不被允许的...2020-11-03
- 在使用url进行参数传递时,经常会传递一些 中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参 数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端java的encodeURI函数编码的URL,结果就不 一样。...2014-04-27
两种方法解决javascript url post 特殊字符转义 + & #
本文主要介绍javascript使用url传值的时候数据丢失的问题,希望对大家有所帮助。...2016-04-16- 下面一款防止php页面给sql注入的一个程序代码,有需要的朋友可参考。 以下代码实现过滤php的$_GET 和$_POST参数 代码如下 复制代码 /** *...2016-11-25
- 这篇文章主要介绍了c#转义字符串中的所有正则特殊字符,大家可以参考使用...2020-06-25
- 正则表达式中的特殊字符,就是一些有特殊含义的字符,如“*.txt”中的*,简单的说就是表示任何字符串的意思...2021-05-07
- 当要在防止页面攻击时,可在页面的头部include防攻击文件,就像通用防注入文件。我们可以用三种情况来办到: 1、在每个文件内引用。这样的文件是可以,不过如果一个网站内有...2016-11-25
- 这篇文章主要给大家介绍了MySQL创建带特殊字符的数据库名称方法,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起看看吧。...2017-03-14
- 这篇文章主要介绍了C#简单的特殊输出,以实例实现了针对一些特殊字符与位置的输出控制,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇jquery过滤特殊字符',防sql注入的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
- 这段程序代码是一款php $_POST、$_GET防注入程序哦,以前我们也写过很多sql防注入程序,下面来看看这款防注入的php代码吧。 <? /************************* 说明:...2016-11-25
- 在php正则表达式中包括了大量的特殊字符,像有字符/,字符^,字符$,字符+ ,字符?,字符. ,字符x│y,字符{ n } 等等这些字符我们称作为特殊字符,因为它们不可以直接用平常的方法...2016-11-25
- 这篇文章主要介绍了mysql密码中有特殊字符&在命令行下登录的操作,具有很好的参考价值希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
- <?php教程 /************************* 说明: 判断传递的变量中是否含有非法字符 如$_post、$_get 功能: 防注入 **************************/ //要过...2016-11-25
- 在php中防注入一般会写一个全局文件用来过滤特殊的字符串,本文章来总结了各种各样的php防注入函数代码,同时还可防sql注入大家可参考。 为了安全,我们常用到下面的函...2016-11-25
- 对于sql注入与防注入其实就是一个攻与防的,今天我们要告诉大家最基本的注入和防止方法,原理都是利用了php或mysql的一些特性而我们没注意所造成的。 一个简单的SQL...2016-11-25
- 这篇文章主要介绍了PHP简单处理表单输入的特殊字符的方法,涉及PHP中trim(),strip_tags(),htmlspecialchars()及addslashes()等函数的使用技巧,需要的朋友可以参考下...2016-02-05
- 1.网页不允许脱机浏览<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 2.文字不允许被打印<style>@media print {.notptn {display:none;}}</style><div class...2016-09-20
- 一: 这个话题太老生常谈了. 在PHP.INI中将magic_quotes_gpc = On 确实能防得住一些注入式攻击,但这是不是万能的? 我们现在是将POST或者GET收到的变量,将其...2016-11-25