一、SQL注入防范
在一个WEB动态页面中(例如aspx或者jsp),这个页面允许用户在输入框中输入字符,这个字符可以被引入到数据库中去进行查询(这里的查询是通用的说法,实际上包括了增删改查)操作。一个黑客在这个输入框中输入了一个畸形查询字符串,从而改变了原有的查询,这可以被用来插入,改变,或损害后台数据库。怎么可能呢?请看下面的例子。
以登陆为例,后台代码通过构造SQL语句“select * from user where username = 'txtUserName.Text.Trim() 'and password ='txtPwd.Text.Trim()';如果用户在输入框中输入用户名为admin'or'1'='1, 让后任意输入比如123为密码,则后台执行的SQL语句为select * from user where username='admin'or'1'='1'and password='123';这是,无论密码是否正确,最终SQL语句查询结果都不为空,这便是一个典型的SQL注入攻击,通过此种方式,攻击者成功绕过密码验证,登陆系统。一个典型的解决方案是构造“select count(*) from user where username='txtUserName.Text.Trim() 'and password = 'txtPwd.Text.Trim()'这样的SQL语句,这样如果攻击者采取上述攻击方式,则会因为返回 ......
比较常用的SQL语句语法(Oracle)
一.数据控制语句 (DML) 部分
1.INSERT (往数据表里插入记录的语句)
INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……);
INSERT INTO 表名(字段名1, 字段名2, ……) SELECT 字段名1, 字段名2, …… from 另外的表名;
字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''.
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验.
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS
INSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,
方法借用ORACLE里自带的DBMS_LOB程序包.
INSERT时如果要用到从1开始自动增长的序列号, 应该先建立一个序列号
CREATE ......
例:
要求匹配标题
<div class="detail-hd">
<h3>
五皇冠 2010春装新品时尚T恤 长袖 女装长款T恤 热卖韩版长T 特价
</h3>
$reg="|<div class=\"detail-hd\">[\n\r\t]*<h3>[\n\r\t]*(.*)[\n\r\t]*</h3>|";
preg_match_all ($reg,$html,$out, PREG_PATTERN_ORDER);
/*
foreach ($out as $value){
foreach ($value as $value2){
echo ($value2."<br>");
}
}
*/
echo ($out[1][0]."<br>");
总结:
1、html中的两个尖括号不用转义"<>"
2、"冒号要转义,PHP语法需要
3、要配置括号(本身要转义\(,不转义就是正则的分组
4、反斜杠不用转义/
6、匹配回车[\n\r\t]
7、匹配包括回车在内的所有字符[\s\S]
8、单引号不用转义/
9、preg_match_all 的界定符可以是|或者#,如果用|,就不能表达分支条件了,故用#好些,如:
$reg="#http://.*?(\.jpg|\.gif)#i";
preg_match_all ($reg,$g_attributes,$out, PREG_PATTERN_ORDER);
10、ikmb ......
昨天在看我的google快讯时看到了php中的这个函数,发现我好像对这个函数不是特别的了解吗
查看了手册,发现了这个函数主要是转义了数据库中的特殊字符,比如 ' 单引号 " 双引号等在数据库中的特殊的字符
当然了这个addslashes使用是要先检查magic_quotes_gpc这个的系统配置了,如果配置了就必须不能在使用了,如果两次转就不对了,所以一般代码是这样写的
if (!
get_magic_quotes_gpc
()) {
$lastname
=
addslashes
(
$_POST
[
'lastname'
]);
} else {
$lastname
=
$_POST
[
'lastname'
];
}
可我突然想这些转义符好像在mssql数据库里不是这样的啊,像双引号是根本不用转的,单引号也是变成了两个个单引号啊,看到网站下面确实是这样啊,不需要的而且是多此一举的,而且这个默认有是开着的,如果我要操作mssql数据库不是很麻烦吗
是有个函数可以转化回来的 striplashes 可以去掉转义符号的
看来php是专门为mysql数据库设计的啊
在看striplashes 看到了这样一个例子
<?php
$str
=
"Is your name O\ ......
sink按:今天是周末所以看了下书。因为我一直认为无论多忙,无论忙什么,每个周应该给自己一个有阳光的下午,带上一杯饮品,看着杂志或者著作。看的是《程序员2009精华本》,惊奇的发现PHP5.3已经出现,而那篇文章写得很好,故网上搜索了下并转载过来。
毫无疑问,如今PHP已经成为WEB开方当中最热门的技术之一。根据nexen.net的调查,互联网上三分之一的网站选择PHP来开发服务器端程序。在欧美和日本等国家,PHP开发市场呈现出一片欣欣向荣的景象,像Facebook、Yahoo!、Flickr和Sourceforge这样的知名PHP站点数不胜数。而近年来国内的各大网站也逐渐大量使用PHP。
依靠活跃、组织严密的开发社区,PHP语言本身一直在稳定地进步–一方面不断改善性能和稳定性,增加各种实用的开发工具;另一方面积极汲取其它编程语言的优点来充实语言特性。如今的PHP,即可以支持强大的面向对象开发(如Java),又保留了简单易学的语法(如C),同时,PHP还拥有极其多样化的各种实用的函数、扩展和类库,非常方便用于WEB开发。另外,随着面向对象开发的逐步普及,各种开源的PHP类库和开发框架层出不穷。
6月底,PHP官方正式发布了PHP5.3.0。这是一个不寻常的PHP版本,因为它修复了不少Bu ......
MySQL数据库编码、html页面编码、PHP或html文件本身编码要全部一致。
1、MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表、建立字段、插入数据时不要指定编码,会自动继承数据库的编码。
数据库连接时,也有编码,可以在连接完数据库后,执行
mysql_query(‘SET NAMES gbk’);//将gbk换成你的编码,如utf8。
2、html页面的编码,指的是这一行的设置:
<meta http-equiv=”Content-Type” content=”text/html; charset=gbk” />
3、PHP或html文件本身的编码:用editplus打开php文件或html文件,另存时,选择的编码,如果数据库和页面编码是gbk,则这儿的编码选择ansi;如果数据库和页面编码是utf-8,则这儿也选择utf-8。
4、另外要注意的是,Javascript或Flash中传递的数据是utf-8编码,如果数据库和页面编码是gbk,要进行转码,然后写入数据库。
iconv(‘utf-8′, ‘gbk’, $content);
5、在PHP程序中,可以加上一行,来指定PHP源程序的编码:
header(‘Content-type: text/html; charset=gbk’);
超越C++原创文章,转载请注明来源并保留原文 ......