`
pz9042
  • 浏览: 30518 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

对插入数据库的数据的处理

    博客分类:
  • php
阅读更多
我们对于用户提交的数据,在插入数据库之前一定要进行一些必要的处理
SQL injection问题在ASP上可是闹得沸沸扬扬 当然还有不少国内外著名的PHP程序“遇难”。至于SQL injection的详情,网上的文章太多了,在此就不作介绍。如果你网站空间的php.ini文件里的magic_quotes_gpc设成了off, 那么PHP就不会在敏感字符前加上反斜杠(\),由于表单提交的内容可能含有敏感字符,如单引号('),就导致了SQL injection的漏洞。在这种情况下,我们可以用addslashes()来解决问题,它会自动在敏感字符前添加反斜杠。但是,上面的方法只适用于 magic_quotes_gpc=Off的情况。作为一个开发者,你不知道每个用户的magic_quotes_gpc是On还是Off,如果把全部的 数据都用上addslashes(),那不是“滥杀无辜”了?假如magic_quotes_gpc=On,并且又用了addslashes()函数,那 让我们来看看:
_POST[message],内容为 Tom's book
//这此加入连接MySQL数据库的代码,自己写吧
//在$_POST[message]的敏感字符前加上反斜杠 $_POST[message] = addslashes($_POST[message]);
//由于magic_quotes_gpc=On,所以又一次在敏感字符前加反斜杠 $sql = "INSERT INTO msg_table VALUE($_POST[message]);";
//发送请求,把内容保存到数据库内 $query = mysql_query($sql);
//如果你再从数据库内提取这个记录并输出,就会看到 Tom\'s book ?>
这样的话,在magic_quotes_gpc=On的环境里,所有输入的单引号()都会变成(\)…… 其实我们可以用get_magic_quotes_gpc()函数轻易地解决这个问题。当magic_quotes_gpc=On时,该函数返回 TRUE;当magic_quotes_gpc=Off时,返回FALSE。至此,肯定已经有不少人意识到:问题已经解决。请看代 码:_quotes_gpc=Off,那就为提单提交的$_POST[message]里的敏感字符加反斜杠
//magic_quotes_gpc=On的情况下,则不加 if (!get_magic_quotes_gpc()) { $_POST[message] = addslashes($_POST[message]); } else {} ?>
其实说到这里,问题已经解决。下面再说一个小技巧。有时表单提交的变量不止一个,可能有十几个,几十个。那么一次一次地复制/粘帖 addslashes(),是否麻烦了一点?由于从表单或URL获取的数据都是以数组形式出现的,如$_POST、$_GET) 那就自定义一个可以“横扫千军”的函数: _quotes_gpc=Off,那么就开始处理if (!get_magic_quotes_gpc()) { //判断$content是否为数组 if (is_array($content)) {
//如果$content是数组,那么就处理它的每一个单无 foreach ($content as $key=>$value) { $content[$key] = addslashes($value); } } else {
//如果$content不是数组,那么就仅处理一次 addslashes($content); } } else {
//如果magic_quotes_gpc=On,那么就不处理 }
//返回$content return $content; } ?>
需要注意的是,magic_quotes_gpc=On ,只会处理$_GET,$_POST ,$_COOKIE,也即客户提的数据。
除去这种格式的函数是stripslashes();


还有一种处理方法

这个函数将一些特殊字符转换一下.
比如说
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
' <' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

在插入前转换很大的一部分原因是执行sql时产生错误,比如说 " '之类的.
读数据的时候不需要转换是因为 不论&还是&amp;浏览器都能识别.


如果不用HTMLSpecialChars,,就会导致读取时,要把" <script>"之类的HTML标签“原本”的输出,而这一输出就有漏洞了,万一那个插入数据库的人是黑客,插入的不是一般的字符串,而是 “ <script> <b> <body>”等等之类的东西,读取后,就是一个HTML文档之类的东西,这样,他可以利用这个漏洞欺骗其他人,或者借这个漏洞攻击别人等等,搞个框架跳转到某一网站等等操作
分享到:
评论

相关推荐

    Delphi批量插入数据库数据..rar

    本压缩包“Delphi批量插入数据库数据”可能包含了一个或多个示例代码,用于演示如何在Delphi中高效地向数据库批量插入数据。 批量插入数据是数据库操作中的常见需求,尤其是在处理大量数据时,为了提高效率和减少...

    java连接数据库并且向数据库插入数据

    在Java编程中,连接数据库并插入数据...总的来说,学习这个主题将帮助你理解Web开发中的数据处理流程,包括Java连接数据库、执行SQL操作以及使用Servlet处理用户请求。这为构建动态、数据驱动的Web应用程序奠定了基础。

    C#.NET中如何批量插入大量数据到数据库中

    在后端,我们处理`btn2_Click`事件来读取Excel文件并填充`GridView`,`btninsert_Click`事件则负责将`GridView`中的数据批量插入数据库。 ```csharp // 后台代码片段 protected void btn2_Click(object sender, ...

    往数据库插入数据,相同的不插入

    2. **数据处理逻辑**: - 首先,通过`matAdmin.split(",")`将输入字符串按逗号分割成数组。 - 接下来,遍历该数组中的每个元素,根据这些元素创建新的`MatAdmin`对象并准备插入数据库。 - 如果`malist`为空或大小...

    插入数据到数据库

    数据库是存储和管理信息的核心工具,对于初学者来说,理解如何向数据库中插入数据是学习数据库操作的基础。本文将深入探讨“插入数据到数据库”的概念、步骤和常见方法。 首先,我们要了解数据库的基本结构。数据库...

    labview 数据库的表格创建,数据更新,数据删除,数据查询,数据插入,数据显示。

    总之,LabVIEW结合其数据库工具,为用户提供了强大且灵活的方式来管理和操作数据库,无论是简单的数据操作还是复杂的数据处理任务,都能胜任。通过学习和实践,你可以构建出高效且直观的数据库应用程序。

    批量插入数据库方法

    批量插入数据库的方法可以显著提高数据导入的效率,避免了单条插入时的频繁交互,减少了网络延迟和数据库事务开销。在C#中,我们可以利用ADO.NET或Entity Framework等库来实现这一功能。 1. **ADO.NET批量插入**: ...

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    通过以上知识的学习和实践,开发者可以熟练地在Java环境中实现多线程数据互导,高效使用数据库连接池,以及进行多表插入操作,提升系统的并发处理能力和性能。在实际工作中,还需要根据具体需求和场景,灵活运用这些...

    QT实现图片插入数据库并显示

    4. **SQL操作**:使用`QSqlQuery`类执行SQL语句,如INSERT,来将图像数据插入数据库。需要注意的是,插入BLOB字段时,可能需要使用`blob()`函数或者直接传入`QByteArray`对象。 5. **检索图像**:从数据库中检索...

    用java程序怎么实现200ms往数据库中插入10000条数据

    Java 实现高效数据库插入数据 在 Java 程序中,实现高效的数据库插入数据是非常重要的。以下是相关的知识点: 使用 JDBC 连接数据库 在 Java 程序中,使用 JDBC(Java Database Connectivity)连接数据库是非常...

    MFC数据库插入数据代码

    本篇文章将深入探讨如何在MFC中使用Visual Studio的SQL语句来插入数据到SQL Server 2005数据库。MFC提供了一套封装了ODBC(Open Database Connectivity)的类库,使得在C++中操作数据库变得更加便捷。 首先,我们...

    Excel在Gridview显示与插入数据库

    总的来说,这个主题涵盖了数据导入、前端展示、用户交互以及后端处理等多个方面,对于开发Web应用程序特别是涉及到数据处理和分析的场景非常有用。通过掌握这些技能,开发者可以构建更高效、用户体验更好的Web应用。

    批量插入数据到Oracle数据库Demo

    在IT行业中,数据库管理是至关重要的,特别是在大数据处理和企业级应用中。Oracle数据库系统作为全球广泛使用的数据库管理系统之一,其高效性和稳定性深受用户青睐。本教程将详细讲解如何进行批量插入数据到Oracle...

    JAVA中向数据库中插入数据的源代码

    在Java编程中,向数据库插入数据是常见的操作之一,尤其在构建桌面应用或者Web应用时。本示例将重点讲解如何使用Java与Microsoft Access数据库进行交互,实现数据的插入功能。Access是一种轻量级的关系型数据库管理...

    ORACLE数据库中插入大字段数据的解决方法

    首先,我们需要了解ORACLE数据库对大字段的处理方式。CLOB类型用于存储大量的文本数据,而BLOB则适用于二进制大数据,如图片或视频。当插入或更新包含大字段的数据时,ORACLE会采用不同的策略以优化存储和性能。 1....

    odbc 数据库批量插入操作

    在IT领域,尤其是在大数据处理中,批量插入操作是提高效率的关键步骤,尤其当涉及大量数据时,如10万条记录。本话题将深入探讨如何使用ODBC进行数据库的批量插入操作,并与单条更新操作进行对比,展示其性能优势。 ...

    将EXCEL数据 插入ORACLE数据库

    在IT行业中,将Excel数据插入Oracle数据库是一项常见的任务,尤其对于数据分析、报表生成以及数据迁移等场景至关重要。本文将详细讲解如何实现...理解并熟练掌握这些方法,对提升工作效率和数据处理能力具有重要意义。

    在ASP.NET中向数据库中插入数据.rar

    在ASP.NET中向数据库插入数据是一项常见的开发任务,它涉及到Web应用程序与数据库之间的交互。ASP.NET是Microsoft开发的一个用于构建动态网站、Web应用和Web服务的框架,它提供了丰富的工具和API来帮助开发者轻松地...

    生成插入数据 从数据库里生成 插入 数据

    在IT行业中,数据库管理是至关重要的任务之一,而“生成插入数据 从数据库里生成 插入 数据”这个主题涉及到数据库操作中的数据导出、数据提取以及如何将这些数据有效地重新插入到另一个数据库中。这一过程通常用于...

    C#大数据批量插入Access程序

    在IT领域,数据库管理是至关重要的,特别是在处理大数据量时。C#作为.NET框架下的主要编程语言,提供了...通过学习和理解这个程序,你可以更好地掌握C#与数据库交互的能力,尤其是面对Access数据库时的大数据处理场景。

Global site tag (gtag.js) - Google Analytics