<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; PHP安全</title>
	<atom:link href="https://www.phppan.com/tag/php%e5%ae%89%e5%85%a8/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sun, 12 Apr 2026 03:47:23 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>安全？安全！安全！！</title>
		<link>https://www.phppan.com/2011/01/safe/</link>
		<comments>https://www.phppan.com/2011/01/safe/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 01:33:56 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP安全]]></category>
		<category><![CDATA[安全]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1232</guid>
		<description><![CDATA[安全？安全！安全！！ 在某日下班后，回家的路上，一个人走，走着走着，忽然我的手碰到了另一支手，艳遇？扭头！发现 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>安全？安全！安全！！<br />
在某日下班后，回家的路上，一个人走，走着走着，忽然我的手碰到了另一支手，艳遇？扭头！发现一新疆美男在左顾右盼。然而我背的包已经被拉开了一半。好险，我的kindle，钱包都在包里。</p>
<p>年关将近，是该注意安全了。特别是回家的路上，请各位兄弟照顾好贵重物品和老婆，防火防盗啊！</p>
<p>好吧，言归正转。我们还是说说我们在开发中的安全问题吧。</p>
<p>这里我们从一次PHP请求过程来说明一些常见的安全问题。</p>
<p><strong>【从客户端到服务器应用层】</strong><br />
每次用户的请求都会先通过客户端发起请求，然后服务器接收请求并处理这个请求。<br />
如果我们在客户端有验证（如必须输入用户名之类的），此时我们除了在客户端验证外，更重要的是在服务器的应用层进行验证（所有的验证必须在服务器有一份）。这些验证包括不能为空，输入内容的长度，输入内容的类型等。如果确定为数字型，可以考虑将其转化为数字类型后使用。<br />
为什么要这样做呢？因为我们不相信客户端，也不相信客户端的验证。在某些情况下，对于用户输入的数据，我们不仅仅是过滤，在必要的时候可能需要直接提示用户输入错误。<br />
如果我们在实际项目中要做类似于投票的功能，需要对用户进行限制，常规的，ip,验证码等。除此之外，如果是基于某个已有应用，并且这个应用是有账号这个概念的，那么我们可以加入基于账号的验证；如果整个投票活动是基于某个活动流程，那么我们也可以加入流程验证。</p>
<p><strong>【从应用层到数据层】</strong><br />
在应用层接收到客户端的数据后，如果此时我们需要查询后台的数据进行相关计算，那么我们需要调用数据层获取数据，当把参数传给数据层后，数据层应该不相信应用层的数据，它需要按照自己的逻辑进行类型等的验证，然后再将查询的条件传给数据库。<br />
这样也许可以减少一些SQL注入漏洞。</p>
<p><strong>【从服务器应用层到客户端展示】</strong><br />
当应用层从数据层获取数据处理完后，需要在前台展示，此时会将计算结果返回给客户端。<br />
在显示计算结果之前我们需要将计算结果进行过滤。因为我们不相信服务器（或者说数据层）返回给我们的信息。对，不相信他们。<br />
这样也许可以减少一些存储式跨站脚本漏洞。</p>
<p><strong>【服务器本身的问题】</strong><br />
就PHP本身而言，一些必要的参数，安全模式的开启。比如php.ini中的open_basedir参数。<br />
或者在开发机器经常看到可以浏览整个目录的情况。<br />
或者PHP中的打开register_globals（新的版本默认为关闭）</p>
<p>所有的说到底就一个原则：<strong>不要相信任何人!</strong><br />
此时想起了面向对象中的迪米特法则：不要和陌生人说话。<br />
也许没有什么关联，只是在某些点上，大道相通。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2011/01/safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
