在PHP中,我知道使用parameterizedqueries是防止SQL注入(inject)的最佳方法。但是如何清理将用于其他目的的用户输入,例如:向用户显示(潜在的跨站点脚本向量)处理电子邮件或填写邮件正文htmlentities()是清理非数据库使用的最佳方法吗?这里什么被认为是最佳实践? 最佳答案 在php中,最好的xss过滤器是:htmlspecialchars($_POST['param'],ENT_QUOTES);您还必须对引号进行编码的原因是因为您不需要来利用一些xss。例如,这很容易受到xss攻击:print('l
我是网络编程的初学者。我正在尝试创建一个从SQL数据库读取数据的简单网站。起初我只是写了我的数据库密码并直接登录到php代码中:这显然不是一个好主意!那么什么是(更)“安全”的方式来做到这一点?我读到有关将php代码放入一个单独的文件中,这意味着不进入网站的主要php文档,然后限制对该文件的访问。也许通过.htaccess文件。这是要走的路吗? 最佳答案 config.php文件和.htaccess是一个经典/好的方法。这是通常使用CMS或框架完成的方式。正如JohnP所指出的,您还可以将config.php存储在公共(public
我需要在PHP中创建一个可证明公平(确定性和种子)加密安全(CS)随机数生成器。我们正在运行PHP5,而PHP7现在并不是一个真正的选择。但是,我找到了PHP7的新CS函数的polyfill,所以我已经实现了该解决方案(https://github.com/paragonie/random_compat)。我认为srand()可用于为random_int()设置种子,但现在我不确定是否是这样。CSPRNG甚至可以播种吗?如果可以播种,输出是否是确定性的(相同的随机结果,给定相同的种子)?这是我的代码:require_once($_SERVER['DOCUMENT_ROOT']."/li
我正在用PHP实现一个简单的目录列表脚本。我想在打开目录句柄和随意回显结果之前确保传递的路径是安全的。$f=$_GET["f"];if(!$f){$f="/";}//makesure$fissafe$farr=explode("/",$f);$unsafe=false;foreach($farras$farre){//protectagainstdirectorytraversalif(strpos($farre,"..")!=false){$unsafe=true;break;}if(end($farr)!=$farre){//makesurenodotsarepresent(exc
我已经对像这个网站上的评论(类似的东西)进行了投票,我有点担心可能的http请求滥用。在我向您展示有问题的代码后,您就会明白我的意思:$.ajax({type:'POST',url:'http://localhost/comments/vote_down/'+post_id});现在它仍在本地主机上,但最终会进入网络。如果有人只是制作某种将运行n次这个urlhttp://localhost/comments/vote_down/post_id的脚本怎么办。甚至用户身份验证也不是很有帮助,您只需调整恶意脚本进行身份验证,然后再做一次。我怎样才能使这个请求更安全,我该怎么办?谢谢编辑我看到
在为Symfony2做了一整天的简单任务而没有运气之后,我决定向你们寻求解决方案。问题是:我想使用doctrine进行http_basic身份验证,因此系统会提示用户输入保存在数据库中的用户名/密码。所以,我遵循了以下步骤:1)使用交互式控制台生成器创建了一个名为User的新实体。它是这样的:http://pastebin.com/3RzrwFzL2)如文档中所述,我已经实现了UserInterface并添加了4个缺失的方法。现在实体看起来像这样:http://pastebin.com/Epw3YrwR3)我尽可能少地修改了security.yml以使其工作,它看起来像这样:http:
我在我的网站上添加了一个简单的所见即所得编辑器。(它只允许B/I/U-不再)我目前将所有内容作为html存储在我的数据库中-但添加很简单或其他恶意代码)在PHP中安全解析此输入的最佳方法是什么?如何实现,等等作为白名单并对其他所有内容进行编码? 最佳答案 HTML净化器我只是要把这个扔出去,可能会不可避免地遭到抨击。我不会使用strip_tags来保护您的WYSIWYG表单...永远(除非您想激怒您的用户)。它不会保护您的表单,您可能会扼杀您的用户体验。ChrisShiftlett在他的博文中写了一段精彩的段落Idetestcomm
我通常使用这个函数来清理我的表单输入,然后再将它们存储到我的数据库中://Functiontosanitizevaluesreceivedfromtheform.PreventsSQLinjectionfunctionclean($str){$str=@trim($str);if(get_magic_quotes_gpc()){$str=stripslashes($str);}returnmysql_real_escape_string($str);}直到今天我才意识到mysql_real_escape_string需要数据库连接,因为我只在将数据存储到数据库之前清理数据时才使用它。我
几天前我遇到了一个可怕的问题。我在我的ubuntu服务器上安装更新,它是大约10个网站的主机。在更新期间,出了点问题,apachesmod_php被禁用了。结果,PHP支持消失了,几分钟后(直到我弄清楚出了什么问题)用户收到了下载PHP脚本的邀请,而不是看到一个网站。不用说,没有什么比将您的脚本源暴露给全世界更糟糕的了,尤其是当数据库凭据保存在内部时。问题:我如何配置apache,这样以后就不会出现这种情况了?如果mod_php被禁用,我应该向apache2.conf添加什么行,以便无法下载PHP文件? 最佳答案 在根目录下的.ht
例如blowfish它返回如下内容:$2a$12$DEzG.CRsHpxpTOAHooQ.wuR6Xe9h6PxFPhOcOvf.lqDNw1TVYVnEO其中包含有关哈希算法类型的信息,并且包含盐。很多资源都说只将这个值存储在数据库中,它是安全的。但是,难道就不能有人根据这些值测试一个常见的密码列表来破解其中的一些吗? 最佳答案 密码散列的安全性并非来自信息的保密性。您已经丢弃了实际的secret,即作为散列值基础的密码。剩余的散列只是原始数据的一种指纹。安全性来自这样一个事实,即不可能从散列中导出原始数据。唯一的可能性是尝试所有