1. 如何将php自定义函数值插入mysql
改成这样:
mysql_query("INSERT INTO c (d) VALUES (".a(5).")",$conn);
2. 求一段php防mysql注入病毒代码。
//POST过滤安全
$_POST=check_input($_POST);
function check_input($value)
{
if(get_magic_quotes_gpc()){
$value = htmlspecialchars(trim($value));
} else {
$value = addslashes(htmlspecialchars(trim($value)));
}
return $value;
}
另一种如下:PHP整站防注入程序,需要在公共文件中require_once本文件
<?PHP
//判断magic_quotes_gpc状态
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//如果是数组,遍历数组,递归调用
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函数来处理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
//整型过滤函数
function num_check($id) {
if (! $id) {
die ( '参数不能为空!' );
} //是否为空的判断
else if (inject_check ( $id )) {
die ( '非法参数' );
} //注入判断
else if (! is_numetic ( $id )) {
die ( '非法参数' );
}
//数字判断
$id = intval ( $id );
//整型化
return $id;
}
//字符过滤函数
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法参数' );
}
//注入判断
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
function search_check($str) {
$str = str_replace ( "_", "\_", $str );
//把"_"过滤掉
$str = str_replace ( "%", "\%", $str );
//把"%"过滤掉
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
//表单过滤函数
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) {
die ( '最少$min字节' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max字节' );
}
return stripslashes_array ( $str );
}
//防注入函数
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile', $sql_str );
}
function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}
?>
3. 关于PHP的mysql函数的mysql_insert_id()问题
mysql_insert_id()函数获取的是数据库表中存储的最有一个索引值
这个最后一个索引值是指最后记录的索引值,比如数据库里有1,2,4,5个数据,我添加了索引值为3的数据,那么数据库表记录的索引值就为3
因为这一机制,就有可能在大量用户并发操作时引发数据混乱。
因此建议,如果用户数据量不是很大,可以使用这个函数获取插入数据ID。如果用户数据量很大,那么建议就在写一条查询语句获取刚插入的数据
4. 如何预防PHP MYSQL注入【攻击】
补充:
对于16进制入侵还没确切防御手段,只能自己手动查有没有被入侵这样
你可以用javascript做客户端限制输入数据,治标不治本而已,填用户名的表单用username做name
function validate(){
var username = $("#username").val();
if (username.match(/[^a-zA-Z0-9]/) || username.length < 3)
{
alert('Invalid username: \'' + username+'\'' );
return false;
}
}
-------------------------------------------------------
php 漏洞已经相对很少了,告诉你个简单的预防单引号的方法
写下这个function
function sql_quote( $value )
{
if( get_magic_quotes_gpc() )
{
$value = stripslashes( $value );
}
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
else
{
$value = addslashes( $value );
}
return $value;
}
然后写sql的时候这么写
$username = $_POST['username'];
query = "SELECT * FROM users WHERE username='".sql_quote($username) . "'";
如果有注入攻击的话必定用到单引号
//没有用sql_quote的sql语言
query = "SELECT * FROM users WHERE username='' OR '1'='1'";
//用了的,单引号就被避免了
query = "SELECT * FROM users WHERE username='\' OR \'1\'=\'1'";
5. php程序员面试题,mysql怎么防止注入
php程序员面试题,mysql怎么防止注入
引发
SQL
注入攻击的主要原因,是因为以下两点原因:
1. php 配置文件 php.ini 中的 magic_quotes_gpc选项没有打开,被置为 off
2. 开发者没有对数据类型进行检查和转义
6. 怎样用PHP中的MySQL操作函数
1. 建立MySQL 连接:mysql_connect
resource mysql_connect([string $server[, string $username [, string $password [, bool $new_link [, int $client flags]]]]])
打开或重复使用一个到MySQL服务器的连接。其中,server代表MySQL服务器,可以包括端口号,例如“hostname:port”。username和password分别代表登录MySQL服务器使用的用户名和密码。
2. 选择 MySQL 数据库:mysql_select_db
bool mysql_select_db(string $database_name[, resource $link_identifier])
设定与指定的连接标识符所关联的服务器上的当前数据库。如果没有指定连接标识符,则使用上一个打开的连接。如果没有打开的连接,本函数将无参数地调用mysql_connect()来尝试打开一个数据库连接。如果成功则返回true,失败则返回false。每个其后的mysgl_query()调用都会作用于活动数据库。
3. 执行查询:mysql_query
resource mysql_query(string $query[, resource $link_identifier])
向与指定的连接标识的关联的服务器中的当前活动数据库发送一条查询。如果没有指定 link_identifier,则使用上一个打开的连接。如果没有打开的连接,本函数会尝试无参数地调用mysql_connect()函数来建立一个连接,查询结果会被缓存。mysql_query()仅对SELECT、SHOW、EXPLAIN或DESCRIBE语句返回一个资源标识符,如果查询执行不正确则返回false。对于其他类型的SQL语句,mysgl_query()在执行成功时返回true,出错时返回false。非false的返回值意味着查询是合法的并能够被服务器执行但是并不说明任何影响到的或返回的行数。因为一条查询执行成功了但并未影响到或并未返回任何行的情况是可能发生的。
4. 从结果集中取得一行作为枚举数组:mysql_fetch_row
array mysql_fetch_row(resource $result)
从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果的列储存在一个索引数组的单元中,偏移量从0开始。依次调用mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回false。
5. 从结果集中取得一行作为关联数组,或数字数组,或二者兼有:mysql_fetch_array
array mysql_fetch_array(resource $result[, int $result_type])
mysql_fetch_row()的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。如果结果中出现字段名重名的现象,最后一列将优先。要访问同名的其他列,必须用该列的数字索引或给该列起个别名。对有别名的列,用别名来访问其内容。
6. 关闭 MySQL 连接:mysql_close
bool mysql_close([resource $link_identifier])
mysql_close()关闭指定的连接标识所关联的到MySQL服务器的非持久连接。如果没有指定link_identifier,则关闭上一个打开的连接。
例PHP中使用MySQL数据库(mysql.php)
<?php//连接MySQL数据库
mysql_connect('localhost', 'root', '123');
//选择当前数据库
//等效为执行USE test
mysql_select_db('test');
//在当前数据库执行SQL语句
$query = "SELECT * FROM students";
$result = mysql_query($query);
//操作上次查询返回的结果集,注意$result变量一般是需要的
while($student = mysql_fetch_array($result)) {
echo '<pre>';
print_r($student);
echo '</pre>';
}
?>
7. PHP中的一些MySQL函数
mysql可通过两种方式通过php与web相连,一种通过php的mysql相关函数,相关函数如下:
MYSQL函数
mysql_affected_rows:
得到
MySQL
最后操作影响的列数目。
mysql_close:
关闭
MySQL
服务器连线。
mysql_connect:
开启
MySQL
服务器连线。
mysql_create_db:
建立一个
MySQL
新资料库。
mysql_data_seek:
移动内部传回指标。
mysql_db_query:
送查询字串
(query)
到
MySQL
资料库。
mysql_drop_db:
移除资料库。
mysql_errno:
传回错误讯息代码。
mysql_error:
传回错误讯息。
mysql_fetch_array:
传回阵列资料。
mysql_fetch_field:
取得栏位资讯。
mysql_fetch_lengths:
传回单列各栏资料最大长度。
mysql_fetch_object:
传回物件资料。
mysql_fetch_row:
传回单列的各栏位。
mysql_field_name:
传回指定栏位的名称。
mysql_field_seek:
设定指标到传回值的某栏位。
mysql_field_table:
获得目前栏位的资料表
(table)
名称。
mysql_field_type:
获得目前栏位的型态。
mysql_field_flags:
获得目前栏位的旗标。
mysql_field_len:
获得目前栏位的长度。
mysql_free_result:
释放传回占用记忆体。
mysql_insert_id:
传回最后一次使用
INSERT
指令的
ID。
mysql_list_fields:
列出指定资料表的栏位
(field)。
mysql_list_dbs:
列出
MySQL
服务器可用的资料库
(database)。
mysql_list_tables:
列出指定资料库的资料表
(table)。
mysql_num_fields:
取得传回栏位的数目。
mysql_num_rows:
取得传回列的数目。
mysql_pconnect:
开启
MySQL
服务器长期连线。
mysql_query:
送出一个
query
字串。
mysql_result:
取得查询
(query)
的结果。
mysql_select_db:
选择一个资料库。
mysql_tablename:
取得资料表名称。
8. PHP中的数据库Mysql有没有注入的危险
只要是 web开发 都有注入的危险,至于PHP能不能连接SQLserver,答案是可以,但是很麻烦,具体参考 blog.csdn.net/gumanren/archive/2009/10/15/4673674.aspx
9. 关于php连接mysql函数
由于没有看到完整的代码,仅就看到的代码试作解答如下:
1. Notice: Undefined variable: db in C:\xampp\htdocs\shop\files\mysql.php on line 5
警告:未字义的变量db(第5行不太清楚是哪行代码)。
这个错误提示,从已知的代码来看,其原因应该是你在函数体里引用了一个函数体外定义的变量(db),从代码看其实就是没有注意到, 对于变量 作用域范围(全局、局部)错误应用的问题。
简单的说,函数 select_mycx 里找不到 db。
解决办法:
(1). 用参数传递进去。
function select_mycx($table,$by,$select_str,$number,$db)
{
.....
}
(2). 在参数体里定义全局变量引用:
function select_mycx($table,$by,$select_str,$number)
{
global $db;
....
}
2.Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\shop\files\mysql.php on line 5
这个错误实际上是上面的错误引起的,因为$db没有正确引入,所以再 query 当然不能正确执行。