以下面的代码为例:
phpinfo(INFO_MODULES | INFO_ENVIRONMENT | INFO_VARIABLES);
Run Code Online (Sandbox Code Playgroud)
正在使用单个参数,但我提供了由单个管道符号分隔的选项列表.
先感谢您.
我有一个If-else语句,它检查字符串以查看是否有ISBN-10或ISBN-13(书籍ID).
我面临的问题是在ISBN-10检查之前发生的ISBN-10检查,ISBN-10检查将匹配10个字符或更多的任何内容,因此可能会将ISBN-13误认为是ISBN-10.
这是代码......
$str = "ISBN:9780113411436";
if(preg_match("/\d{9}(?:\d|X)/", $str, $matches)){
echo "ISBN-10 FOUND\n";
//isbn returned will be 9780113411
return 0;
}
else if(preg_match("/\d{12}(?:\d|X)/", $str, $matches)){
echo "ISBN-13 FOUND\n";
//isbn returned will be 9780113411436
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我该如何确保避免此问题?
我知道PHP 5.5是alpha版本,但我正在制作的这个类只是通过使用function_exists()来提前使用它的散列特性.
我查看了password_hash文档.第三个参数是$ options,它目前支持两个选项,'salt'和'cost'.
它陈述如下:
cost,表示应该使用的算法成本.可以在crypt()页面上找到这些值的示例.
当我进入crypt()页面时,它提供的文档是:
Blowfish使用盐进行散列如下:"$ 2a $","$ 2x $"或"$ 2y $",两位数的成本参数"$"和字母表中的22位数字"./0-9A-Za -z".在salt中使用此范围之外的字符将导致crypt()返回零长度字符串.两位数的成本参数是底层基于Blowfish的散列算法的迭代计数的基数2对数,并且必须在04-31范围内,超出此范围的值将导致crypt()失败.5.3.7之前的PHP版本仅支持"$ 2a $"作为salt前缀:PHP 5.3.7引入了新的前缀来修复Blowfish实现中的安全漏洞.有关安全修复程序的完整详细信息,请参阅»此文档,但总而言之,仅针对PHP 5.3.7及更高版本的开发人员应使用"$ 2y $"优先于"$ 2a $".
我似乎无法把头包裹起来.它说PHP 5.3.7及更高版本应该使用$ 2y $,但是我用什么成本来获得那个并且它是最好的选择值?他们提供的示例使用的值为7,但根据上述情况,它可以达到31,使用说4与31相比有什么不同?
根据手册:password_hash可以使用此功能(PHP 5 >= 5.5.0)
在寻找替代方法后,我从这里找到了这个简单的功能:http://www.sitepoint.com/password-hashing-in-php/
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);
return crypt($password, $salt);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在使用function_exists前管理我的代码,但我的问题是关于上面的替代代码,如果它的安全与否,或者在旧版本的PHP中有没有其他选择?
如果时间是AM到PM(例如:上午11点到晚上10点),我的代码工作正常,但如果操作时间是AM到AM(例如:上午9点 - 凌晨1点),它会中断.这是我的代码:
$datedivide = explode(" - ", $day['hours']); //$day['hours'] Example 11:00 AM - 10:00 PM
$from = ''.$day['days'].' '.$datedivide[0].'';
$to = ''.$day['days'].' '.$datedivide[1].'';
$date = date('l g:i A');
$date = is_int($date) ? $date : strtotime($date);
$from = is_int($from) ? $from : strtotime($from);
$to = is_int($to) ? $to : strtotime($to);
if (($date > $from) && ($date < $to) && ($dateh != 'Closed')) {
?>
<script type="text/javascript">
$(document).ready(function(){
$('.entry-title-container').append('<div class="column two"><h2 style="color:green;text-align: left;margin: 0;">OPEN<br /><span style="color:#222;font-size:12px;display: block;">Closes at <?php echo $datedivide[1]; …Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么这两个会给出不同的结果吗?
我用PHP执行它.
date("YW",mktime(0, 0, 0, 3, 22 , 2013)); // outputs 201312
Run Code Online (Sandbox Code Playgroud)
当我用MySQL执行它时
SELECT YEARWEEK(now()); // outputs 201311
Run Code Online (Sandbox Code Playgroud) 我正在尝试从PHP 5.5中调用一个名为password_hash()的新函数.
无论我做什么,$ hash和$ password都不匹配.
$password = "test";
$hash = "$2y$10$fXJEsC0zWAR2tDrmlJgSaecbKyiEOK9GDCRKDReYM8gH2bG2mbO4e";
if (password_verify($password, $hash)) {
echo "Success";
}
else {
echo "Error";
}
Run Code Online (Sandbox Code Playgroud) 我在test.js中有以下代码,它在</ body>之前运行:
alert('stovetop');
alert(greasy);
Run Code Online (Sandbox Code Playgroud)
我在test.user.js中有以下代码:
(function () {
'use strict';
var greasy = 'greasy variable';
document.title = 'greasy title';
}());
Run Code Online (Sandbox Code Playgroud)
'炉灶'得到警报,所以我知道页面javascript工作,并document.title得到更改,所以我知道脚本javascript工作.但是,在网页上我收到错误:
错误:ReferenceError:未定义greasy源文件:/test.js
如何从网页上访问由Greasemonkey设置的变量,反之亦然?
PHP 5.5中新的password_hash API很不错,我想开始在任何地方使用它.鉴于较旧的项目具有较旧的数据库,其中密码存储在md5哈希中,将旧用户密码迁移到新的更安全的API的最佳方法是什么?
除了简单地提示用户在下次登录时重置密码(这对用户来说这是不切实际和烦人的)我还考虑过使用当前md5哈希作为所有现有用户的password_hash()输入的可能性.为了验证这些用户的密码(在登录期间),我将他们的输入转换为md5哈希,然后将其用于password_verify().新用户将免于这一额外的步骤.
这是一个值得这样做的方法吗?是否有更好的透明迁移方式,用户不会因密码重置而烦恼,但我可以立即享受更安全的哈希带来的好处吗?
最重要的是,在使用现有的md5哈希(易于暴力)和使用password_hash()API来"双重哈希"时,是否还有安全优势?
php ×9
passwords ×5
hash ×3
security ×3
date ×2
arguments ×1
bcrypt ×1
datetime ×1
firefox ×1
function ×1
greasemonkey ×1
isbn ×1
javascript ×1
mysql ×1
regex ×1
strtotime ×1
validation ×1
week-number ×1